【问题标题】:NSTimeZone isDaylightSavingTime giving wrong valueNSTimeZone isDaylightSavingTime 给出错误的值
【发布时间】:2017-03-14 12:01:03
【问题描述】:

目前 GMT-0700(美国/太平洋)已经处于夏令时

但我从 NSTimeZone 得到“不”

NSTimeZone *timeZone = [NSTimeZone timeZoneForSecondsFromGMT:secondsFromGMT]; //Getting timezone as GMT-0700 
BOOL isDaylightSavingTime = [timeZone isDaylightSavingTime]; //getting boolean value as NO

如何解决这个问题?

要求:我想知道,我的接收器是否使用 dayLightSavingTime。我只会获得接收器偏移值。我必须支持不同的时区()..什么是最好的方法来做到这一点

【问题讨论】:

    标签: ios objective-c dst nstimezone


    【解决方案1】:

    timeZoneForSecondsFromGMT 不够具体。

    最准确的方法是使用(完整)区域名称创建时区:

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"America/Los_Angeles"];
    

    【讨论】:

    • 如果我想检查“isDayLight”,这只是一个非常基本的问题。我为什么要使用“PST”
    • 真的,Apple 应该弃用 timeZoneWithAbbreviation。不同的时区具有相同的缩写,例如“菲律宾标准时间”。此外,夏令时的变体有时缩写为“PDT”。
    • 夏令时很大程度上取决于地区。只有与 UTC 的区别太模糊了。
    • 我们应该支持这些时区(太平洋、东部、中部、山区)并且应该检查它是否是夏令时。我该怎么做呢
    • America/Los_Angeles 是最正确的值。 US/Pacific 也可以,但主要是为了向后兼容。我建议删除有关缩写的部分。时区缩写存在很多问题,通常应避免使用。
    【解决方案2】:

    这不是错误的值。你得到时区 GMT-0700 但这不是太平洋时区。要创建太平洋时区,您需要:

    timeZone = [NSTimeZone timeZoneWithName:@"PST"];
    

    这是来自苹果文档的简短描述:

    + (instancetype)timeZoneForSecondsFromGMT:(NSInteger)seconds;

    描述 返回从格林威治平均值偏移的时区对象 给定秒数的时间。新时区的名称是 GMT +/- 偏移量,以小时和分钟为单位。 使用此创建的时区 方法永远不会有夏令时,并且偏移量是恒定的 no 日期很重要。

    【讨论】:

    • 太平洋标准时间?我从来没有听说过有这个名字的时区。我听说过美国/太平洋地区。
    • 你也可以使用这个字符串来创建时区。
    • PST 是缩写。请参阅文档。 developer.apple.com/reference/foundation/nstimezone
    • 如果我想检查“isDayLight”,这只是一个非常基本的问题。我为什么要使用“PST”
    • 缩写没有标准化,实际上取决于您使用的语言。 PST 也可以表示“菲律宾标准时间”。真的,不要使用缩写来创建时区。仅将它们用于向用户显示。
    【解决方案3】:

    提到timeZoneWithName 的其他答案是正确的,但我认为还有一个细节没有被提及。 timeZoneForSecondsFromGMT 不起作用的原因是 GMT 没有夏令时(或夏令时,因为在其他一些国家更合理地称呼它)。 GMT 不向前或向后跳跃;它总是以每秒一秒的速度前进。由于您要求 GMT 的固定秒数,因此结果也没有 GMT。如果它为您提供了一个观察夏令时的时区,那么距 GMT 的秒数将不得不每年更改两次。但是由于您要求固定的秒数,因此您得到的结果不会这样做,并且永远不会报告有效的夏令时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-14
      • 2019-07-15
      • 2012-05-03
      相关资源
      最近更新 更多