我有app是一个基本的计时器。它跟踪应用程序运行的秒数。我想转换它所以秒(NSUInteger)显示如下:00:00:12(hh:mm:ss)。所以我读过这篇文章:
NSNumber of seconds to Hours, minutes, seconds
我写了这段代码:
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[self meeting] elapsedSeconds]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss"];
它工作正常,但它从04:00:00开始。我不知道为什么。我也尝试过这样的事情:
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:[[self meeting] elapsedSeconds] * -1];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"hh:mm:ss"];
认为它会正确地显示计数器,但它在01:23:00变得很奇怪,然后只是翻到04:00:00并在其余时间停留在那里。
MS
答案 0 :(得分:50)
这类似于关于格式化时间的previous answer,但不需要日期格式化程序,因为我们不再处理日期了。
如果您将整数秒存储为整数,则可以自行计算各个时间组件:
NSUInteger h = elapsedSeconds / 3600;
NSUInteger m = (elapsedSeconds / 60) % 60;
NSUInteger s = elapsedSeconds % 60;
NSString *formattedTime = [NSString stringWithFormat:@"%u:%02u:%02u", h, m, s];
答案 1 :(得分:7)
虽然有更简单的方法可以做到这一点(@dreamlax有一个非常好的方法),让我解释你的例子有什么问题,让它让它运作起来:
首先,它显示04:00:00
(好吧,实际上可能显示04:00:12
)的原因是因为它将时间从UTC / GMT转换为当地时间。要解决此问题,您需要添加以下行:
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
然后,它将不再显示04:00:12
,因为它不会转换时区。不幸的是,它现在会显示12:00:12
而不是00:00:12
,因为它是午夜。为了解决这个问题,请将字符串转换为24小时,而不是使用HH
格式化程序而不是hh
:
[formatter setDateFormat:@"HH:mm:ss"];
请记住,由于这是为了与时间一起工作,因此它将无法工作超过24小时(因为它将“再次”翻转到午夜)。
完整的代码是:
NSDate *date = [NSDate dateWithTimeIntervalSince1970:[[self meeting] elapsedSeconds]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSLog(@"%@", [formatter stringFromDate:date]);
// Results: 00:00:12