【问题标题】:In iOS is daylight saving in NSTimeZone broken?在 iOS 中,NSTimeZone 中的夏令时被破坏了吗?
【发布时间】:2011-04-16 02:56:56
【问题描述】:

我有两个变量:

NSTimeZone *timeZoneMinus5 = [NSTimeZone timeZoneForSecondsFromGMT: -18000];
NSTimeZone *timeZoneEST = [NSTimeZone timeZoneWithName:@"EST"];

在设备和模拟器上测试,都返回GMT-05:00

在我写这篇文章时,时间是2:55 am (GMT)。我在 EST 时区,所以我的时间是 10:55pm (GMT-05:00),遵守 2011 年 4 月 15 日的夏令时。

但是,[timeZoneEST isDaylightSavingTime] 返回 NO[timeZoneEST daylightSavingTimeOffset] 返回 0

如果我使用timeZoneEST 以字符串形式获取当前时间:

NSDate *gmtTime = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"h:mm a (z)"];
[dateFormatter setTimeZone: timeZoneEST];
NSString *timeStr = [dateFormatter stringFromDate: gmtTime];

模拟器和设备都给我9:55 PM (GMT-05:00)

据我了解,我应该得到10:55 PM (GMT-05:00)。是我错了还是我做错了?

【问题讨论】:

    标签: ios dst nstimezone


    【解决方案1】:

    你很困惑。首先,美国东部时区的夏令时是-4,而不是-5。晚上 9 点 55 分肯定是凌晨 2 点 55 分之前的 5 小时;晚上 10:55 会提前 4 小时。

    “EST”很可能会准确地为您提供:东部标准时间,而不考虑夏令时。 “EST5EDT”可能会为您提供您期望的时区,但(假设设备像模拟器一样使用 zoneinfo)“America/New_York”会是首选。

    【讨论】:

    • 确实如此,现在我也感到困惑了。我的服务器端程序将值 -18000 发送到应用程序,该程序在时间错误的 VM 中运行。还是谢谢。
    【解决方案2】:

    您将NSTimeZone 定义为EST,因此[timeZoneEST isDaylightSavingTime] 返回NO 是有道理的。而是使用[[NSTimeZone localTimeZone] daylightSavingTimeOffset]; 来获取当地时间的夏令时偏移。它应该返回3600 秒。

    【讨论】:

      猜你喜欢
      • 2011-02-14
      • 2021-01-13
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-17
      相关资源
      最近更新 更多