gpt4 book ai didi

objective-c - 没有夏令时的日期计算

转载 作者:行者123 更新时间:2023-12-03 17:39:56 24 4
gpt4 key购买 nike

我正在尝试为调度应用程序执行日期计算,但遇到了夏令时问题。我正在尝试使用以下方法确定两个日期之间的天数:

NSDateComponents *activityComponents = [[NSDateComponents alloc]init];
activityComponents = [self.calendar components:NSDayCalendarUnit
fromDate:self.viewBeginDate
toDate:item.ES
options:0];
NSLog(@"Days: %d and hours: %d", [activityComponents day], [activityComponents hour]);

其中 self.viewBeginDateitem.ES 都是 NSDate 对象,self.calendar 是公历。

  • 在 2013 年 11 月 1 日至 2013 年 11 月 1 日期间计算时,结果为 0。
  • 计算 2013 年 11 月 1 日至 2013 年 11 月 2 日期间时,结果为 1。
  • 计算 2013 年 11 月 1 日至 2013 年 11 月 3 日期间时,结果为 2。
  • 在计算2013年11月1日至2013年11月4日期间时,它提供了2再来一次!

这是我的输出:

    Days: 0 and hours: 0
Days: 1 and hours: 0
Days: 2 and hours: 0
Days: 2 and hours: 24
Days: 3 and hours: 23

我希望能够确定 2 个 NSDate 对象之间的天数,而不受夏令时的影响,因为我的应用不关心用户所在的本地或时区。我只是想让它告诉我 2013 年 11 月 1 日到 2013 年 11 月 4 日之间有 3 天。有什么想法吗?

我的 NSDate 对象是根据以下格式的字符串创建的:2013-11-01 00:00:00 +0000。每个日期的时间设置为 00:00:00,GMT 偏移量为 +0000。

我想到了两种可能的选择:

  • 使用 isDaylightSavingTime 检查每个日期,如果该日期是夏令时,则创建一个偏移 1 小时的新(修改后的)日期。我担心增加的计算时间,因为我的应用程序计算给定开始日期和一系列其他日期之间的日期。该数组中最多可以包含 2,000 个日期。我不确定这是否是一个合理的担忧......
  • 创建不受 DST 影响的自定义时区。这可能吗?

最佳答案

我可以使用 10 月 27 日左右的日期(英国夏令时开始时)并将时区设置为欧洲/伦敦来确认您的观察结果。 “n 天 24 小时”似乎是一个怪癖(对 bug 的友好说法,有人忘了携带)。

解决方案 1:使用设置为 UTC 的 NSCalendar。 UTC 没有夏令时。

解决方案 2:由于您的所有时间都是午夜,并且最大夏令时类次为 1 小时,因此“一天”介于 23 到 25 小时之间。为了允许这一点,并同时简单地处理怪癖:

daysBetween = [activityComponents day] + ([activityComponents hour] >= 23 ? 1 : 0);

请注意,这有效,因为两个日期的时间相同!

关于objective-c - 没有夏令时的日期计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com