【问题标题】:Why 'Z' is at the end of date while converting from UTC to BST?为什么在从 UTC 转换为 BST 时“Z”在日期的末尾?
【发布时间】:2019-11-20 13:02:07
【问题描述】:

尝试使用日期格式将 UTC 转换为 BST(英国夏令时)。但它在日期结束时给了我“Z”。它适用于从 UTS 到 IST 的对话。下面是我的代码。

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setLocale:[NSLocale currentLocale]];
    [dateFormatter setDateFormat:@"dd'-'MM'-'yyyy HH':'mm':'ss ZZZZZ"];
    NSMutableString *dateString = [NSMutableString stringWithFormat:@"%@", [dateFormatter stringFromDate:[NSDate date]]];
    NSLog(@"%@",dateString); // This prints 20-11-2019 12:49:02 Z

任何人都可以知道为什么会发生这种情况。代码有任何问题或需要更改吗?

【问题讨论】:

  • 确切的输入是什么,确切的预期与实际结果是什么?
  • @luk2302 输入:2019-11-20 13:24:09 +0000([NSDate date]),预计:20-11-2019 13:22:59 +00:00
  • 这仅适用于英国时间,因为它是当地时间和 UTC 相同。

标签: ios timezone nsdateformatter


【解决方案1】:

将您的日期格式中的ZZZZZ 替换为xxxxx。使用ZZZZZ 将给出-99:99,除非用户在GMT 时区,在这种情况下它只是给出Zxxxxx 将提供 -99:99 而不管用户的时区。

具体细节可以在Unicode specification看到。

对于ZZZZZ 它声明:

-08:00
-07:52:58
带有小时、分钟和可选秒字段的 ISO8601 扩展格式。本地时间偏移量为 0 时使用 ISO8601 UTC 指示符“Z”。这相当于“XXXXX”说明符。

对于XXXXX,它声明:

-08:00
-07:52:58
Z
带有小时、分钟和可选秒字段的 ISO8601 扩展格式。本地时差为0时使用ISO8601 UTC指示符“Z”。(同xxxxx,加“Z”)

对于xxxxx,它声明:

-08:00
-07:52:58
带有小时、分钟和可选秒字段的 ISO8601 扩展格式。 (同XXXXX,减去“Z”。)

【讨论】:

    猜你喜欢
    • 2021-07-03
    • 2016-09-06
    • 2011-05-19
    • 2012-02-18
    • 2021-09-27
    • 1970-01-01
    • 2012-06-29
    • 2011-08-29
    • 2021-12-31
    相关资源
    最近更新 更多