【问题标题】:Compare iOS Time Zone Rules比较 iOS 时区规则
【发布时间】:2013-08-12 03:06:24
【问题描述】:

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

有没有一种简单的方法来比较 iOS 中的 TimeZone 规则?

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

比较数据不起作用,我只比较secondsFromGMT吗?

编辑 比较offset好像确实有效,但是不知道以后会不会出问题?

【问题讨论】:

    标签: ios cocoa-touch nstimezone


    【解决方案1】:

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

    这给出了当前日期的缩写(在您的情况下,如果不是夏令时,则为 EDT,如果是夏令时,则为 EST)。如果您想要特定日期的缩写,您可以使用abbreviationForDate: 并插入任何日期。

    Here is some more information about NSTimeZone

    编辑:

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

    【讨论】:

    • 我想我读到的地方并不完全安全,因为美国和澳大利亚都有 EST?
    • @JDewzy 澳大利亚东部标准时间的缩写是AEST
    • 缩写取决于语言环境。
    • 那么如果依赖locale,是不是应该不用呢?或者,如果美国以外的人不太可能使用我的应用,那也没关系?
    • @JDewzy 您说的完全正确,不推荐使用 3 个字母的缩写,因为它们没有标准化。使用与 GMT 的差异更安全。
    【解决方案2】:

    在我们的工具应用上处理时区问题让我很痛苦,其中包括跨时区的事件安排。时区名称使用起来并不友好。此外,夏令时是一个很大的痛苦。

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

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

    NSTimeZone *zone = [NSTimeZone systemTimeZone];
    NSInteger timeZoneOffset = [zone secondsFromGMT];
    
    
    [self.dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeZoneOffset]];
    

    【讨论】:

    • 你总是把它归零吗?或者这只是一个例子?
    • 抱歉,这是我在将特定项目的所有时间标准化为 GMT 时如何使用它的示例。这是一个不好的例子。
    • 如果您编辑答案以更直接地回答我的问题,我会接受。因为根据 Android 的说法,他们的“hasSameRules”方法只计算格林威治标准时间的秒数,这似乎是您想要达到的目标?还是我应该将我从 Android 网站收集的解决方案与您所说的结合起来发布?
    • 欢迎发布您的解决方案。但请不要使用安卓解决方案!!! (我认为/希望您指的是 Apple 的网站,而不是 Android 的)我希望看到更多关于此的信息。
    • 哈哈,我说的是安卓。 Android 有一个“hasSameRules”方法。这真的是我想做的。这是一个链接:developer.android.com/reference/java/util/…。它说它只是比较偏移量。所以我打算使用同样的逻辑。所以我的解决方案是创建两个 NSTimeZones,两个整数的偏移量,然后比较这两个整数。
    猜你喜欢
    • 2015-02-08
    • 2017-10-26
    • 2019-08-06
    • 2023-04-08
    • 2013-01-21
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多