3

比较两个时区的最佳方法是什么?

我在使用方法比较两个NSTimeZone实例时遇到了一个问题。- (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone

NSString *timeZoneName = ...

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

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

第 1 步:转到设置(应用程序)> 常规 > 日期和时间 > 时区并搜索“Austin”。您将获得的条目将是“美国奥斯汀”。选择此时区。这应该是您现在的新系统时区!

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

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

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

4

1 回答 1

3

我为此发布了一个错误 - 错误是奥斯汀不在已知时区列表中,但设置应用程序提供。

根据 Apple 工程师的说法:

要让两个 NSTimeZone 比较相等,名称和数据(由 -data 返回)都必须相等。比较时区时必须小心,因为两个时区与 GMT 的偏移量可能相同,但由于历史原因可能不是同一个时区。请记住,时区用于各种日历计算,这意味着它们只有在历史上始终具有相同的 GMT 偏移量、相同的夏令时转换等情况下才相等。

于 2011-11-24T08:00:23.223 回答