ios - 与 NSDateComponents 的时差

标签 ios objective-c nsdate nsdatecomponents

我正在构建一个应用程序,而我需要计算两个 NSDate 之间的时间。

我对 NSObject 进行了子类化并将其命名为“MyObject”(为了解决这个问题而进行了简化)。

它拥有这两个属性

@property (nonatomic, strong) NSDate *startDate;
@property (nonatomic, strong) NSDate *endDate;

我有一个数组,存储 x 个 MyObjects,我像这样循环访问

NSTimeInterval totalInterval = 0;
for (MyObject *currentObject in _listOfItems)
{
    totalInterval += [currentObject.endDate timeIntervalSinceDate:currentObject.startDate];
}

我使用 totalInterval 来总结所有“跨度”组合的长度。我通过设置 2 个 NSDate 来做到这一点,只是为了计算差异。

NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:totalInterval sinceDate:date1];

我正在设置这些标志:

unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth;

并将结果作为 NSDateComponent 返回,如下所示:

return [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

我的问题:当我使用上述单位时,我得到了错误的结果 - 即 11h 20m,而真正的答案约为 83h。我发现我不必要地指定了 NSCalendarUnitDay 和 NSCalendarUnitMonth 单位。阅读文档后,我读到“无需指定比您感兴趣的组件更多的组件”,并且我删除了两个不必要的指定单元。这给了我正确的结果,但为什么呢? 为什么仅仅指定更多单位就会报告错误的结果?

谢谢!

最佳答案

计算始终从您要求的最大单位开始。因此,如果您询问天和小时,但只检查小时,您将看到以 24 为模的实际总小时数。这适用于 NSCalendar 执行的任何日期分解。

关于ios - 与 NSDateComponents 的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32579578/

相关文章:

objective-c - 按键和基本对象,需要 NSView 吗?

ios - 如何基于数组快速对多个数组进行排序?

android - 如何在 Mobile 中获取 One Signal 唯一用户 ID?

ios - Swift -如何显示每行包含多个字符串(不是组件)的 UIPickerView

objective-c - NSOpenPanel 新文档按钮不起作用

ios - 无法为此找到正确的日期格式 (NSDateFormatter)

objective-c - NSDateFormatter dateFromString 返回不正确的日期

ios - RAC命令困惑

无需注册的 iOS 用户注册/身份验证(使用 Parse/Swift)

ios - UIScrollView 中的 subview 不会根据内容大小调整大小