2011-10-25 59 views
3

什么是比较两个时区的最佳方式?系统时区与所选时区

我现在面临的一个问题,而使用- (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone方法比较两个NSTimeZone实例。

NSString *timeZoneName = ... 

NSTimeZone *sytemTimeZone = [NSTimeZone systemTimeZone]; 
NSTimeZone *selectedTimeZone = [NSTimeZone timeZoneWithName:timeZoneName]; 

if ([sytemTimeZone isEqualToTimeZone:selectedTimeZone]) 
    isEqual = YES; 
else 
    isEqual = NO; 

第1步:进入设置(应用程序)>常规>日期&时间>时区,并搜索 “奥斯汀”。你会得到的入口是“美国奥斯汀”。选择此时区。这应该是你的新系统时区吧!

第2步:创建一个小型的iPhone/iPad应用程序。使用[NSTimeZone knownTimeZoneNames]获取时区名称列表。然后尝试找到“奥斯汀”。它不在那里!那么,我想我们可以使用“美国/芝加哥”作为时区?

为什么设置的时区列表与我们的不同?

第3步:现在比较系统时区和“美国/芝加哥”的时区。他们不匹配。

+0

如果您记录系统时区的“名称”,它显示了什么? –

+0

“US/Central(CDT)offset -18000(Daylight)” – Mustafa

+0

对于在应用程序中设置的“America/Chicago”,它给了我“America/Chicago(CDT)offset -18000(Daylight)”。 – Mustafa

回答

3

我为此发布了一个错误 - 错误在于Austin不在已知时区列表中,而是由设置应用程序提供。

作为每一个苹果工程师:

对于双NSTimeZones为比较相等,两者的名称和数据(如 返回由-data)必须相等。 比较时区时必须小心,因为两个区域可以具有与GMT相同的偏移量,但由于历史原因而不是同一时区。记住 时区用于各种日历计算,即 ,这意味着它们只有在历史上它们总是具有相同的GMT偏移量,相同的夏令时转换, 等等时才是相等的。