我有两个变量:
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)
。我错了还是我做错了?
答案 0 :(得分:1)
有可能“EST”正好给你:东部标准时间而不考虑夏令时。 “EST5EDT”可能会给你你想要的时区,虽然(假设设备使用zoneinfo作为模拟器),“America / New_York”将是首选。
答案 1 :(得分:1)
您将NSTimeZone
定义为EST,因此[timeZoneEST isDaylightSavingTime]
返回NO
是有意义的。而是使用[[NSTimeZone localTimeZone] daylightSavingTimeOffset];
获取当地时间的夏令时偏移量。它应该返回3600
秒。