比较iOS时区规则

3
如果用户在东部时间,我不想显示“EST”或“EDT”,但如果他们不是,我希望显示它。
在iOS中有没有一种简单的方法比较TimeZone规则?
[NSTimeZone localTimeZone]返回美国/印第安纳波利斯,但我只想知道它是否为东部时间。
比较数据不起作用,我只比较秒数(secondsFromGMT)吗?
编辑 比较偏移似乎有效,但我不知道它以后会不会引起问题?
2个回答

1
您可以使用[[NSTimeZone localTimeZone] abbreviation];来获取用户所在时区的缩写。
这将提供当前日期的缩写(如果不是夏令时,则为EDT,如果是夏令时,则为EST,在您的情况下)。 如果您想要特定日期的缩写,可以使用abbreviationForDate:并插入任何日期。 这里有关于NSTimeZone的更多信息 编辑:
如果您想要实际比较多个时区(例如检查是否为当前时区),则可以使用isEqualToTimeZone:。 如果这不符合您的需求,请查看该链接中的其他NSTimeZone方法。

1
我记得在某个地方看到过,这不是完全安全的,因为EST在美国和澳大利亚都有存在? - dewyze
@JDewzy 澳大利亚东部标准时间的缩写是AEST - Caleb
1
缩写取决于所在地区。 - uchuugaka
1
@JDewzy,您说得完全正确,三字母缩写已经被弃用,因为它们没有标准化。使用与GMT的差异会更加安全。 - Sulthan
@Jsdodgers 那样做行不通。你必须将其与每个可能的东部时区进行比较。US/Eastern和American/Indianapolis并不相等。 - dewyze
显示剩余2条评论

0

在我们的工具应用程序中,处理跨时区事件安排等事务问题时,我经常遇到很多麻烦,其中包括时区名称不太友好。此外,夏令时也是一件非常烦人的事情。

对我来说一直有效的方法是使用类似 timeZoneForSecondsFromGMT 的调用

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

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


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

你总是将它清零吗?还是那只是一个例子? - dewyze
抱歉,那只是我在一个特定项目中将所有时间标准化为GMT时使用的示例。那是个不好的例子。 - HalR
如果您编辑答案以更直接回答我的问题,我会接受它。因为根据Android的说法,他们的“hasSameRules”方法只是计算与GMT相差的秒数,这似乎是您试图解决的问题?还是我应该发布从Android网站收集的解决方案,再结合您的建议? - dewyze
请随意发布您的解决方案。但请不要使用Android的解决方案!!!(我认为/希望您是指苹果的网站,而不是安卓的)。我很想看到更多关于此的信息。 - HalR
哈哈,我确实是指Android。Android有一个“hasSameRules”方法。这正是我想要做的。这里是链接:http://developer.android.com/reference/java/util/TimeZone.html#hasSameRules(java.util.TimeZone)。它说它只比较偏移量。所以我打算使用同样的逻辑。因此,我的解决方案是创建两个NSTimeZones,两个偏移量的整数,并比较这两个整数。 - dewyze

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接