在iOS中NSTimeZone的夏令时破碎了吗?

时间:2011-04-16 02:56:57

标签: ios dst nstimezone

我有两个变量:

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)。我错了还是我做错了?

2 个答案:

答案 0 :(得分:1)

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

有可能“EST”正好给你:东部标准时间而不考虑夏令时。 “EST5EDT”可能会给你你想要的时区,虽然(假设设备使用zoneinfo作为模拟器),“America / New_York”将是首选。

答案 1 :(得分:1)

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