如何将时间转换为iPhone设备的时区?

时间:2009-07-04 06:21:35

标签: mysql iphone datetime timezone

我在EST时区有一段时间,它是在mysql服务器上使用NOW()函数完成的。因为我的服务器位于EST,所以存储的时间是EST。当我从iPhone上的应用程序中检索它时,我需要在用户的正确时区显示它。我该怎么做?

2 个答案:

答案 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]);
}];