系统时区与所选时区

发布于 2024-12-11 11:42:50 字数 858 浏览 0 评论 0原文

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

我在使用 - (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 应用程序。使用[NSTimeZoneknownTimeZoneNames]获取时区名称列表。然后尝试找到“奥斯汀”。它不在那里!那么,我想我们可以使用“美国/芝加哥”作为时区?

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

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

What's the best way to compare two time zones?

I'm facing an issue while comparing two NSTimeZone instances using - (BOOL)isEqualToTimeZone:(NSTimeZone *)aTimeZone method.

NSString *timeZoneName = ...

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

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

Step 1: Go to Settings (Application) > General > Date & Time > Time Zone and search for "Austin". The entry that you'll get will be "Austin, U.S.A". Select this Time Zone. This SHOULD be your new system time zone now!

Step 2: Create a small iPhone/iPad application. Use [NSTimeZone knownTimeZoneNames] to get a list of time zone names. Then try to find "Austin". It's not there! So, i guess we can use "America/Chicago" as the timezone?

Why is the Setting's timezone list different from ours?

Step 3: Now compare the system timezone with time zone for "America/Chicago". They don't match.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

哀由 2024-12-18 11:42:50

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

根据苹果工程师的说法:

要比较两个 NSTimeZone 是否相等,名称和数据(如
由 -data 返回)必须相等。当你
比较时区,因为两个时区可以具有相同的偏移量
GMT 但由于历史原因而不是同一时区。记住
时区用于各种日历计算,
这意味着,只有在整个历史上,他们才是平等的
始终具有相同的 GMT 偏移量、相同的夏令时转换,
等等。

I've posted a bug for this - The bug is that Austin isn't in the known time zone list yet is offered by the settings app.

As per an Apple Engineer:

For two NSTimeZones to compare equal, both the names and the data (as
returns by -data) must be equal. You have to be careful when
comparing time zones, because two zones can have the same offset from
GMT but not be the same time zone for historical reasons. Remember
that time zones are used for all sorts of calendrical calculations,
meaning that they are only equal if, throughout history, they've
always had the same GMT offset, the same daylight savings transitions,
and so on.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文