我正在构建一个应用程序,而我需要计算两个NSDates之间的时间。
我对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 NSDates来做到这一点,这只是为了计算差异。
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];我的问题是:当我使用上面的单元时,我得到了错误的结果--11h20m,而真正的答案是83h。我了解到,我没有必要指定NSCalendarUnitDay和NSCalendarUnitMonth单元。在阅读了这些文档之后,我读到“没有必要指定比您感兴趣的组件更多的组件”,我删除了这两个不必要的指定单元。这给了我正确的结果,但是为什么呢?为什么要通过简单地指定更多的单元来报告错误的结果?
谢谢!
发布于 2015-09-15 07:20:13
它为什么要简单地指定更多的单位来报告错误的结果呢?
NSDateComponents表示这两个日期之间的所有时间(在您的情况下是300.000秒),在多天(3)、小时(11)和分钟(11)中指定。
只要求几秒钟就能得到几秒钟,要求几秒钟和几天只会给你这些。只要求几天就可以得到完整的天数,所以它是3天。请注意,NSDateComponents可以表示日期(点时间),也可以表示时间间隔。
这种灵活性使您能够创建一些非常酷的基于时间的组件。
发布于 2015-09-15 07:25:03
计算总是从你所要求的最大单位开始。因此,如果您要求每天和几个小时,但只检查小时,您将看到实际的总时数模24。这适用于NSCalendar执行的任何日期分解。
https://stackoverflow.com/questions/32579578
复制相似问题