如何将时间转换为 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 设备的时区?的主要内容,如果未能解决你的问题,请参考以下文章