【问题标题】:NSDateFormatter not recognizing timezoneNSDateFormatter 无法识别时区
【发布时间】:2013-07-15 06:45:26
【问题描述】:

我有这个日期:

2013-07-15T06:07:53-04:00

我使用 NSDateFormatter 将其转换为 NSDate:

    [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"];

这可行,但它无法识别时区。它返回:

2013-07-15 10:07:53 +0000

我做错了什么?

谢谢

【问题讨论】:

  • 你在哪里设置时区?
  • @Kasaname 未明确设置任何时区。日期格式化程序不应该从日期字符串中获取它吗?

标签: ios objective-c cocoa-touch nsdate nsdateformatter


【解决方案1】:

日志输出正确。 NSLogging 和 NSDate 将始终以 UTC 显示日期/时间(查看您的输出如何使用 +0000 而不是 -04:00)。 NSDate 对象代表一个特定的时刻,与日历和时区无关。您可以将此“时刻”与格式化程序(设置时区)结合使用,以便将该“时刻”格式化为特定于语言环境的时间。

如果您想使用自己的时区查看日志输出:

// pick a different timezone if necessary
[formatter setTimeZone:[NSTimeZone localTimeZone]];

NSLog(@"%@", [formatter stringFromDate:momentInTime];

【讨论】:

    【解决方案2】:

    字符串末尾的“-04:00”不是告诉 NSDateFormatter 这个日期是 GMT-4,因此它只是将其转换为 GMT 吗?

    如果没有,请提供您的 NSDateFormatter 的完整初始化。

    【讨论】:

      【解决方案3】:

      试试这个:

      [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
      

      【讨论】:

      • 这不起作用。格式错误,如果你使用它会给出一个空值
      【解决方案4】:

      更多信息在这里

      iPhone NSDateFormatter Timezone Conversion

      5 ZZZZZ - 这是我写的一个类别,带有一些 GMT 到 BST 的样本

      https://github.com/clearbrian/NSDateFormatter_ISO_8601

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-10
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多