【问题标题】:Find DST (Daylight Savings Time) timestamp using Objective-C/C?使用 Objective-C/C 查找 DST(夏令时)时间戳?
【发布时间】:2013-03-06 14:39:53
【问题描述】:

有没有办法使用 C 或 Objective-C 获取每个国家/地区的夏令时开始和结束的具体日期(方式)?

在墨西哥,夏令时从 4 月的第一个星期日凌晨 2:00 开始,到 10 月的最后一个星期日凌晨 2:00 结束。在许多 POSIX 系统中,这被写为

M4.1.0/2,M10.5.0/2
(Begins: Month 4, 1st Sunday at 02:00AM, Ends: Month 10, last Sunday at 02:00AM)

我知道有可能知​​道夏令时当前是否正在使用

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone];
BOOL dstIsOn = [systemTimeZone isDaylightSavingTime];

并且有可能获得下一个Daylight Savings开始之前的时间

NSTimeZone* systemTimeZone = [NSTimeZone systemTimeZone];
NSTimeInterval delta = [systemTimeZone daylightSavingTimeOffset];

但是:我将如何找到夏令时开始/结束的具体日期?

那里有一些我找不到的杀手桌吗?

任何帮助将不胜感激!

【问题讨论】:

  • 仅供参考,在美国,我们的夏令时现在已经延长了大约 3 周。
  • @CarlVeazey 你确实是正确的。将国家更改为 Méjico,但如果他们观察到 DST,他们会很乐意将其更改为哈萨克斯坦的光荣国。

标签: ios objective-c c cocoa-touch dst


【解决方案1】:

是的,有 - 你可以使用[NSTimeZone nextDaylightSavingTimeTransitionAfterDate:] 方法。这将返回一个NSDate,您可以将其与daylightSavingTimeOffsetForDate 一起使用来确定偏移量是多少。

通常您会使用它来查找下一个偏移量,但您显然可以使用不同的日期多次运行它以获得一系列即将到来的夏令时更改。还有一个方便的方法nextDaylightSavingTimeTransition,它总是会返回下一个转换。

【讨论】:

  • 请记住,DST 规则更改的频率高于 Apple 发布 iOS 更新的频率。所以来自 NSTimeZone 方法的日期可能已经过时了。在我们的项目中,我们使用您所说的“杀手表”,它是手动更新的。
  • @Jeepston 是的,我知道这一点......我不会那么幸运,你的杀手桌已经被抢了? ;)
  • 很遗憾,我不能分享它,我不是代码的所有者。
  • 这帮助我解决了我的问题。但是,仍然有很多 NSString - 在我能够以我想要的格式获得它之前,例如。 M4.1.0/2,M10.5.0/2.
猜你喜欢
  • 2013-11-25
  • 2015-01-25
  • 2011-10-22
  • 2010-10-09
  • 1970-01-01
  • 2012-12-18
  • 2013-01-31
  • 2011-12-18
  • 2015-06-07
相关资源
最近更新 更多