• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 与 NSDateComponents 的时差

[复制链接]
菜鸟教程小白 发表于 2022-12-12 08:52:57 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在构建一个应用程序,而我需要计算两个 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 个 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];

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

谢谢!



Best Answer-推荐答案


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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap