我在EST时区有一段时间,它是在mysql服务器上使用NOW()函数完成的。因为我的服务器位于EST,所以存储的时间是EST。当我从iPhone上的应用程序中检索它时,我需要在用户的正确时区显示它。我该怎么做?
答案 0 :(得分:3)
我认为这取决于您对EST的意思 - 如果您的意思是美国东海岸,那么一般来说,这比UTC时间落后5小时(但不考虑夏令时),这应该是美国东部时间04:00。尽可能避免使用缩写,因为它们不明确,例如EST是America / Detroit和Australia / Sydney的缩写。使用NSTimeZone initWithName将提供更精确的结果。
Chronos Time Zone Repository提供了一个可读性很好的XML时区数据库,它真正有助于理解时区的工作方式(这一切都非常混乱和可变)。
答案 1 :(得分:3)
//您可以使用以下功能将日期转换为您希望的时区
+ (NSDate *) convertDate:(NSDate *) date toTimeZone:(NSString *) timeZoneAbbreviation {
NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
NSTimeZone *zoneUTC = [NSTimeZone timeZoneWithAbbreviation:timeZoneAbbreviation];
NSTimeInterval s = [zoneUTC secondsFromGMT];
NSTimeZone *myZone = [NSTimeZone timeZoneWithAbbreviation:[systemZone abbreviationForDate:date]];
NSTimeInterval p = [myZone secondsFromGMT];
NSTimeInterval i = s-p;
NSDate *d = [NSDate dateWithTimeInterval:i sinceDate:date];
return d;
}
//Test case **note** cgUtil is the class this method is written thus change it accordingly
__block NSDate *now = [NSDate date];
NSLog(@"Current time:%@", now);
[[[NSTimeZone abbreviationDictionary] allKeys] enumerateObjectsUsingBlock:^(NSString * abb, NSUInteger idx, BOOL *stop) {
NSLog(@"Time zone abb:%@:Time:%@",abb,[cgUtil convertDate:now toTimeZone:abb]);
}];