我有一定数量的 seconds
从某个事件传递过来。它存储在 NSTimeInterval
数据类型中。
我想把它转换成minutes
和seconds
。
例如,我有:“326.4”秒,我想将其转换为以下字符串: “5:26”。
实现这一目标的最佳方法是什么?
谢谢。
最佳答案
简要说明
- 如果您只想转换为分钟,Brian Ramsay 的答案会更方便。
- 如果您希望 Cocoa API 为您执行此操作,并将您的 NSTimeInterval 不仅转换为分钟,还转换为天、月、周等...我认为这是一种更通用的方法
使用 NSCalendar 方法:
(NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts
“作为使用指定组件的 NSDateComponents 对象返回两个提供日期之间的差异”。来自 API 文档。
创建 2 个 NSDate,其区别在于您要转换的 NSTimeInterval。 (如果您的 NSTimeInterval 来自比较 2 个 NSDate,则无需执行此步骤,甚至不需要 NSTimeInterval)。
从 NSDateComponents 获取您的报价
示例代码
// The time interval
NSTimeInterval theTimeInterval = 326.4;
// Get the system calendar
NSCalendar *sysCalendar = [NSCalendar currentCalendar];
// Create the NSDates
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:theTimeInterval sinceDate:date1];
// Get conversion to months, days, hours, minutes
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit;
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:date1 toDate:date2 options:0];
NSLog(@"Conversion: %dmin %dhours %ddays %dmoths",[conversionInfo minute], [conversionInfo hour], [conversionInfo day], [conversionInfo month]);
[date1 release];
[date2 release];
已知问题
- 对于转换来说太多了,你是对的,但这就是 API 的工作原理。
- 我的建议:如果您习惯使用 NSDate 和 NSCalendar 来管理您的时间数据,那么 API 将为您完成繁重的工作。
关于objective-c - 如何将 NSTimeInterval(秒)转换为分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1189252/