比较iOS时区规则

比较iOS时区规则,ios,cocoa-touch,nstimezone,Ios,Cocoa Touch,Nstimezone,如果用户在东部时间,我不想显示“EST”或“EDT”,但如果他们不是,我确实想显示它 有没有比较iOS中时区规则的简单方法 [NSTimeZone localTimeZone]返回美国/印第安纳波利斯,但我只想知道它是否在东部 比较数据不起作用,我是否只比较GMT的秒数 编辑 比较偏移量似乎确实有效,但我不知道以后是否会导致问题?您可以使用[[NSTimeZone localTimeZone]缩写]获取用户所在时区的缩写 这给出了当前日期的缩写(如果不是夏时制,则为EDT;如果是夏时制,则为ES

如果用户在东部时间,我不想显示“EST”或“EDT”,但如果他们不是,我确实想显示它

有没有比较iOS中时区规则的简单方法

[NSTimeZone localTimeZone]
返回美国/印第安纳波利斯,但我只想知道它是否在东部

比较数据不起作用,我是否只比较GMT的秒数

编辑
比较偏移量似乎确实有效,但我不知道以后是否会导致问题?

您可以使用
[[NSTimeZone localTimeZone]缩写]
获取用户所在时区的缩写

这给出了当前日期的缩写(如果不是夏时制,则为EDT;如果是夏时制,则为EST)。如果需要特定日期的缩写,可以使用
缩写fordate:
并插入任何日期

编辑:


如果您想实际比较多个时区(如检查它是否为当前时区),可以使用
isEqualToTimeZone:
。如果这不符合您的需要,请查看该链接中的其他NSTimeZone方法。

在我们的工具应用程序中处理时区问题,包括跨时区的事件调度,让我感到非常痛苦。时区名称使用起来并不友好。此外,夏令时也是一大难题

对我来说一直有效的是使用timeZoneForSecondsFromGMT这样的调用

我还将存储的日期转换为GMT,然后我可以将它们设置为显示的本地时间

NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger timeZoneOffset = [zone secondsFromGMT];


[self.dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeZoneOffset]];

我想我读到了一些不完全安全的地方,因为美国和澳大利亚都有EST?@JDewzy澳大利亚东部标准时间的缩写是缩写,缩写取决于地区。因此,如果它取决于地区,是否应该不使用它?或者,如果美国以外的人不太可能正在使用我的应用程序,那没关系?@JDewzy你完全正确,3个字母的缩写不受欢迎,因为它们没有标准化。使用和格林尼治标准时间的差值要安全得多。你们总是把它归零吗?或者这仅仅是一个例子?对不起,这是一个例子,说明了我在将某个特定项目的所有时间标准化为GMT时是如何使用它的。这是一个坏例子。如果你编辑你的答案,更直接地回答我的问题,我会接受它。因为根据安卓的说法,他们的“hasSameRules”方法只计算格林尼治标准时间的秒数,这似乎就是你想要得到的?或者我应该把我从Android网站收集的解决方案和你说的结合起来发布吗?请随意发布你的解决方案。但是请不要使用Android解决方案!!!(我想/希望你指的是苹果的网站,而不是安卓的)我很想看到更多这方面的信息。哈哈,我指的是安卓。Android有一个“hasSameRules”方法。这才是我真正想做的。这里有一个链接:。它说它只是比较偏移量。所以我要用同样的逻辑。所以我的解决方案是创建两个nTimeZone,偏移量的两个整数,然后比较这两个整数。