首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDateComponents时差法

NSDateComponents时差法
EN

Stack Overflow用户
提问于 2015-09-15 06:55:18
回答 2查看 114关注 0票数 2

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

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

它拥有这两个属性。

代码语言:javascript
复制
@property (nonatomic, strong) NSDate *startDate;
@property (nonatomic, strong) NSDate *endDate;

我有一个存储x号MyObjects的数组,我循环如下所示

代码语言:javascript
复制
NSTimeInterval totalInterval = 0;
for (MyObject *currentObject in _listOfItems)
{
    totalInterval += [currentObject.endDate timeIntervalSinceDate:currentObject.startDate];
}

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

代码语言:javascript
复制
NSDate *date1 = [[NSDate alloc] init];
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:totalInterval sinceDate:date1];

我正在设置这些旗帜:

代码语言:javascript
复制
unsigned int unitFlags = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitDay | NSCalendarUnitMonth;

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

代码语言:javascript
复制
return [sysCalendar components:unitFlags fromDate:date1  toDate:date2  options:0];

我的问题是:当我使用上面的单元时,我得到了错误的结果--11h20m,而真正的答案是83h。我了解到,我没有必要指定NSCalendarUnitDayNSCalendarUnitMonth单元。在阅读了这些文档之后,我读到“没有必要指定比您感兴趣的组件更多的组件”,我删除了这两个不必要的指定单元。这给了我正确的结果,但是为什么呢?为什么要通过简单地指定更多的单元来报告错误的结果?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-15 07:20:13

它为什么要简单地指定更多的单位来报告错误的结果呢?

NSDateComponents表示这两个日期之间的所有时间(在您的情况下是300.000秒),在多天(3)、小时(11)和分钟(11)中指定。

只要求几秒钟就能得到几秒钟,要求几秒钟和几天只会给你这些。只要求几天就可以得到完整的天数,所以它是3天。请注意,NSDateComponents可以表示日期(点时间),也可以表示时间间隔。

这种灵活性使您能够创建一些非常酷的基于时间的组件。

票数 0
EN

Stack Overflow用户

发布于 2015-09-15 07:25:03

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32579578

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档