iPhone中的NSTimeZone是否会自动调整为夏令时

时间:2011-04-21 11:03:23

标签: iphone dst nstimezone

我有一个相当简单的问题。我有一组UTC日期。我希望以正确的本地时间(或者,如果DST当前不生效)为DST向用户表示这些。

因此,如果我执行以下操作,将timeStamp正确设置为纽约当地时间,并在生效时将DST考虑在内

NSDate *date = initialise with a UTC time

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"America/New_York"];
    [formatter setTimeZone:timeZone];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

NSString *timeStamp = [formatter stringFromDate:date];

或者我需要做点什么吗?我是否检查NSTimeZone.isDaylightSavingTime / NSTimeZone.daylightSavingTimeOffset并相应地调整我的日期或类似的东西?

提前致谢?

Twibbles。

1 个答案:

答案 0 :(得分:2)

是的,如果您使用NSDateFormatter创建时区,[NSTimeZone timeZoneWithName]将自动调整夏令时。 NSTimeZone知道每个时区的DST规则,可以查看未来和过去,并为传递给NSDate的{​​{1}}做正确的事情。但是,如果您使用stringForDate创建NSTimeZone,则不会进行DST调整。还应注意,DST规则可能会发生变化,这意味着[NSTimeZone timeZoneForSecondsFromGMT]无法保证始终为所有时区做正确的事情。

您无需使用NSTimeZoneNSTimeZone.isDaylightSavingTimeNSTimeZone.daylightSavingTimeOffset格式化为DST正确的本地时间。这两种方法都在当前时间运行。如果您想知道NSDate是否属于某个时区的DST,您可以使用NSDate方法,如果您想知道NSDate的DST偏移量,您可以使用{{1}方法。