3

我有两个变量:

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

4

2 回答 2

1

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

很有可能“美国东部标准时间”正在为您提供准确的信息:东部标准时间,不考虑夏令时。“EST5EDT”可能会为您提供您期望的时区,尽管(假设设备像模拟器一样使用 zoneinfo)“America/New_York”将是首选。

于 2011-04-16T03:51:00.773 回答
1

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

于 2014-05-06T04:56:32.737 回答