NSTimeInterval格式

Bau*_*aub 40 objective-c nstimeinterval ios

我想把NSTimeInterval它格式化为字符串00:00:00(小时,分钟,秒).做这个的最好方式是什么?

Joh*_*ool 106

从iOS 8.0开始,现在NSDateComponentsFormatter有一种stringFromTimeInterval:方法.

[[NSDateComponentsFormatter new] stringFromTimeInterval:timeInterval];
Run Code Online (Sandbox Code Playgroud)


rob*_*off 60

"最好"是主观的.最简单的方法是:

unsigned int seconds = (unsigned int)round(myTimeInterval);
NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
    seconds / 3600, (seconds / 60) % 60, seconds % 60];
Run Code Online (Sandbox Code Playgroud)

UPDATE

从iOS 8.0和Mac OS X 10.10(Yosemite)开始,NSDateComponentsFormatter如果需要符合语言环境的解决方案,则可以使用.例:

NSTimeInterval interval = 1234.56;
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute |
    NSCalendarUnitSecond;
formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
NSString *string = [formatter stringFromTimeInterval:interval];
NSLog(@"%@", string);
// output: 0:20:34
Run Code Online (Sandbox Code Playgroud)

但是,我没有看到强制它输出两个小时的方法,所以如果这对你很重要,你需要使用不同的解决方案.


Mic*_*ick 27

NSTimeInterval interval = ...;    
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];    
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSString *formattedDate = [dateFormatter stringFromDate:date];
NSLog(@"hh:mm:ss %@", formattedDate);
Run Code Online (Sandbox Code Playgroud)

  • @James:1970年1月1日是[Unix Epoch](http://en.wikipedia.org/wiki/Unix_epoch); 刚开始的时候. (9认同)
  • 这将错误地将小时持续时间> 24小时显示为"小时%24" - 也就是说,持续时间为26小时,35分钟将显示为"02:35:00" (6认同)
  • 只是为了将来参考并找到这个,使用提供的代码显示字符串作为日期将在我当前的时区(00:00:00 - 05:00:00 [我的时区是-5]将显示19:00:00).为了解决这个问题,我通过添加`[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]将日期更改为UTC; (3认同)
  • 不要使用dateWithTimeIntervalSince1970:使用dateWithTimeIntervalSinceReferenceDate:相反,因为后者是指定的初始值并且更准确. (2认同)