2011-04-16 78 views
3

我有两个变量:在iOS中NSTimeZone中的夏令时是否已损坏?

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

测试的设备上,并在模拟器以及两个返回GMT-05:00

正如我在写这个时间是2:55 am (GMT)。我在美国东部时区,所以我的时间是10:55pm (GMT-05:00),于4月15日2011年

观察夏令时。然而,[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)。我错了还是我做错了?

回答

1

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

很可能是“EST”正好给你:东部标准时间,不考虑夏令时。 “EST5EDT”可能会给你所期待的时区,尽管(假设设备使用zoneinfo作为模拟器)“America/New_York”将是首选。

+0

确实,现在我现在也困惑了我。值-18000是由我的服务器端程序发送到应用程序,该程序运行时间错误的虚拟机中。不管怎么说,还是要谢谢你。 – kadam 2011-04-16 05:04:10

+0

谢谢Anomie,这对我有用! – 2012-05-15 15:37:44

1

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