【问题标题】:Getting Current Time in string in Custom format in objective c在目标c中以自定义格式获取当前时间
【发布时间】:2010-12-13 16:23:38
【问题描述】:

我希望当前时间采用以下格式的字符串。

dd-mm-yyyy HH:MM

怎么做?

【问题讨论】:

    标签: iphone objective-c datetime nstimer


    【解决方案1】:

    你想要一个date formatter。这是一个例子:

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"dd-MM-yyyy HH:mm"];
    
    NSDate *currentDate = [NSDate date];
    NSString *dateString = [formatter stringFromDate:currentDate];
    

    【讨论】:

    • 除非你想保留它;内存管理可能会或可能不会进入问题。
    • 日期格式化程序设置起来真的很慢。如果您在表格单元格中设置日期或经常执行此操作,如上所述,您将希望保留它,将它用于所有内容,然后在 dealloc 中释放它。
    • @Moshe,您是否尝试阅读文档? a 是上午/下午时段的格式字符串。 unicode.org/reports/tr35/tr35-10.html#Date_Format_Patterns
    • @CarlNorum 是的,我做到了。单 a 是不行的。如果我不能让它工作,我会马上发布一个问题。编辑:我的错,我是个白痴。
    【解决方案2】:

    如 Carl 所说,要么使用 NSDateFormatter,要么只使用旧的 strftime,这也是完全有效的 Objective-C:

    #import <time.h>
    time_t currentTime = time(NULL);
    struct tm timeStruct;
    localtime_r(&currentTime, &timeStruct);
    char buffer[20];
    strftime(buffer, 20, "%d-%m-%Y %H:%M", &timeStruct);
    

    【讨论】:

    • 请注意,您不能在 Objective C 中使用 C 字符串做太多事情。这在将某些内容记录到控制台时可能会更方便。你可以直接说NSLog(@"%s", buffer)。
    • 在 C 中可以用 C 字符串做的任何事情,都可以在 Objective-C 中做。也就是说,几乎所有的东西。应该可以随意使用 C 字符串和 NSStrings,并为当前用例选择合适的字符串。我个人会选择 Carl 的解决方案,但重要的是要意识到这不是唯一的方法。
    • 我会说不使用 strftime 的原因(尽管它会生成一个您必须转换的 C 字符串)是您也失去了 NSDateFormatter 日期格式选项的更大灵活性,包括更多可变长度的数值结果等等。
    • 这应该是 iOS 上的首选方式,因为这个错误 stackoverflow.com/questions/143075/…,但是我发现 time() 或 localtime_r() 并不总是准确的,我看到了非常奇怪的结果。
    【解决方案3】:

    这是一个简单的解决方案:

    - (NSString *)stringWithDate:(NSDate *)date
    {
      return [NSDateFormatter localizedStringFromDate:date
                                            dateStyle:NSDateFormatterMediumStyle
                                            timeStyle:NSDateFormatterNoStyle];
    }
    

    更改dateStyle 和timeStyle 以符合您的格式要求。

    【讨论】:

    • 你不应该在某处创建日期吗?你没有传递它。
    • 很好 @Randy,刚刚更新了函数以将 date 对象作为参数传递。
    【解决方案4】:

    也许这将更具可读性:

        NSDateFormatter *date = [[NSDateFormatter alloc] init];
        [date setDateFormat:@"HH:mm"];
        NSString *dateString = [date stringFromDate:[NSDate date]];
        [self.time setText:dateString];
    

    首先,我们在 obj-c 中创建一个 NSDateFormatter,其名称为 date,然后我们通过 [[NSDateFormatter alloc] init]; 应用它。之后,我们对代码处理器说我们希望我们的日期具有 HOUR/MINUTE/SECOND。 最后,我们应该让我们的日期成为一个字符串以使用警报或设置标签的值,为此我们应该使用 NSString 方法创建一个字符串,然后我们使用这个:[date stringFromDate:[NSDate date ]]

    玩得开心。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-07
      • 2019-03-26
      相关资源
      最近更新 更多