如果用户在东部时间,我不想显示“EST”或“EDT”,但如果不是,我确实想显示它。
有没有一种简单的方法来比较 iOS 中的 TimeZone 规则?
[NSTimeZone localTimeZone]
返回美国/印第安纳波利斯,但我只想知道它是否在东部。
比较数据不起作用,我只是比较secondsFromGMT
吗?
编辑 比较偏移量似乎确实有效,但我不知道它是否会在以后引起问题?
如果用户在东部时间,我不想显示“EST”或“EDT”,但如果不是,我确实想显示它。
有没有一种简单的方法来比较 iOS 中的 TimeZone 规则?
[NSTimeZone localTimeZone]
返回美国/印第安纳波利斯,但我只想知道它是否在东部。
比较数据不起作用,我只是比较secondsFromGMT
吗?
编辑 比较偏移量似乎确实有效,但我不知道它是否会在以后引起问题?
您可以使用[[NSTimeZone localTimeZone] abbreviation];
来获取用户所在时区的缩写。
这给出了当前日期的缩写(在您的情况下,如果不是夏令时,则为 EDT,如果是夏令时,则为 EST)。如果您想要特定日期的缩写,您可以使用abbreviationForDate:
并插入任何日期。
编辑:
如果您想实际比较多个时区(例如检查它是否是当前时区),您可以使用isEqualToTimeZone:
. 如果这不符合您的需求,请查看该链接中的其他一些 NSTimeZone 方法。
我在处理我们的工具应用程序上的时区问题时遇到了很多痛苦,其中包括跨时区的事件调度。时区名称使用起来并不友好。此外,夏令时是一个很大的痛苦。
对我来说一直有效的是使用 timeZoneForSecondsFromGMT 这样的调用
我还将存储的日期转换为 GMT,然后我可以将它们设置为显示的本地时间。
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger timeZoneOffset = [zone secondsFromGMT];
[self.dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeZoneOffset]];