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

Posted

技术标签:

【中文标题】如何将时间转换为 iPhone 设备的时区?【英文标题】:How to convert time to the time zone of the iPhone device? 【发布时间】:2010-11-08 01:46:48 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我认为这取决于您所说的 EST 的含义 - 如果您指的是美国东海岸,那么通常比 UTC 晚 5 小时(但不考虑夏令时),这应该会给您 04:00 EST。尽量避免使用缩写,因为它们是模棱两可的,例如EST 是 America/Detroit 和 Australia/Sydney 的缩写。使用 NSTimeZone initWithName 会给出更精确的结果。

Chronos Time Zone Repository 提供了一个可读性很好的 XML 时区数据库,它确实有助于理解时区是如何工作的(它非常混乱且多变)。

【讨论】:

【参考方案2】:

//您可以使用下面的函数将日期转换为您想要的时区

+ (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]);
];

【讨论】:

以上是关于如何将时间转换为 iPhone 设备的时区?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UTC 时间转换为本地时间

iPhone:将格林威治标准时间转换为当地时间

将印度时区转换为当地时间

Python:如何将日期时间/时间戳从一个时区转换为另一个时区?

如何将日期/时间从 GMT 转换为本地时区

如何将时间戳转换为字符串(不更改时区)?