1

我有一个相当简单的问题。我有一组 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 并相应地调整我的日期或类似的东西?

提前致谢?

捻转。

4

1 回答 1

2

NSDateFormatter的,如果您使用[NSTimeZone timeZoneWithName]. NSTimeZone了解每个时区的 DST 规则,可以展望未来和过去,并会为NSDate传递给stringForDate. 但是,如果您NSTimeZone使用[NSTimeZone timeZoneForSecondsFromGMT]DST 创建,则不会进行调整。还应该注意的是,夏令时规则可能会发生变化,这意味着NSTimeZone不能保证在所有时区总是做正确的事情。

您不需要使用NSTimeZone.isDaylightSavingTimeNSTimeZone.daylightSavingTimeOffset格式化NSDate为 DST 正确的本地时间。这两种方法都在当前时间运行。如果您想知道NSDate某个时区是否在 DST 范围内,您可以使用该NSTimeZone.isDaylightSavingTimeForDate方法,如果您想知道 NSDate 的 DST 偏移量是多少,您可以使用该NSTimeZone.daylightSavingTimeOffsetForDate方法。

于 2014-03-13T10:29:26.300 回答