objective-c - 如何将 NSTimeInterval(秒)转换为分钟

我有一定数量的 seconds 从某个事件传递过来。它存储在 NSTimeInterval 数据类型中。

我想把它转换成minutesseconds

例如,我有:“326.4”秒,我想将其转换为以下字符串: “5:26”。

实现这一目标的最佳方法是什么?

谢谢。

最佳答案

简要说明

  1. 如果您只想转换为分钟,Brian Ramsay 的答案会更方便。
  2. 如果您希望 Cocoa API 为您执行此操作,并将您的 NSTimeInterval 不仅转换为分钟,还转换为天、月、周等...我认为这是一种更通用的方法
  3. 使用 NSCalendar 方法:

    • (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options:(NSUInteger)opts

    • “作为使用指定组件的 NSDateComponents 对象返回两个提供日期之间的差异”。来自 API 文档。

  4. 创建 2 个 NSDate,其区别在于您要转换的 NSTimeInterval。 (如果您的 NSTimeInterval 来自比较 2 个 NSDate,则无需执行此步骤,甚至不需要 NSTimeInterval)。

  5. 从 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 将为您完成繁重的工作。

https://stackoverflow.com/questions/1189252/

相关文章:

iphone - ${EXECUTABLE_NAME} 和 ${PRODUCT_NAME} 在哪里定

ios - 添加一个简单的 UIAlertView

objective-c - 从当前日期减去 7 天

ios - Swift - 使用哪些类型? NSString 或字符串

iphone - 代码设计错误 : Certificate identity appearing t

ios - 检测到约束模糊地表明高度为零的情况

ios - 从 iPhone 上的 NSString 中删除 HTML 标签

ios - 如何以编程方式检查 iOS 应用程序中是否存在键盘?

ios - 如果没有 Table View 结果,在屏幕上显示 "No Results"

ios - 带有两种不同颜色文本的 UILabel