我有一个相当简单的问题。我有一组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。
答案 0 :(得分:2)
是的,如果您使用NSDateFormatter
创建时区,[NSTimeZone timeZoneWithName]
将自动调整夏令时。 NSTimeZone
知道每个时区的DST规则,可以查看未来和过去,并为传递给NSDate
的{{1}}做正确的事情。但是,如果您使用stringForDate
创建NSTimeZone
,则不会进行DST调整。还应注意,DST规则可能会发生变化,这意味着[NSTimeZone timeZoneForSecondsFromGMT]
无法保证始终为所有时区做正确的事情。
您无需使用NSTimeZone
或NSTimeZone.isDaylightSavingTime
将NSTimeZone.daylightSavingTimeOffset
格式化为DST正确的本地时间。这两种方法都在当前时间运行。如果您想知道NSDate
是否属于某个时区的DST,您可以使用NSDate
方法,如果您想知道NSDate的DST偏移量,您可以使用{{1}方法。