【问题标题】:Represent date string as UTC date and convert it into local timezone将日期字符串表示为 UTC 日期并将其转换为本地时区
【发布时间】:2019-02-12 16:56:55
【问题描述】:

后端为我提供格式为“2018-09-07 01:00:00 am”的日期。该日期的时区为 UTC。现在我必须将其转换为本地时区。我正在使用的功能是:

func getLocalDate(dateString: String) -> String {

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss a"
    dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
    dateFormatter.locale = Locale.current

    let dt = dateFormatter.date(from: dateString)

    dateFormatter.timeZone = TimeZone.current
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss aZ"

    return dateFormatter.string(from: dt!)

}

这样,日期首先转换为 UTC,然后转换为本地时区,所以我没有得到想要的结果。如何在不进行任何转换的情况下将该日期的时区设置为 UTC?

编辑: 我得到的输出是 2018-09-07 05:45:00 AM+0545 但预期的输出是 2018-09-07 06:45:00 AM+0545

【问题讨论】:

  • 你得到了什么结果,预期的结果是什么?你在哪个时区?
  • 在创建 UTC 日期时删除 dateFormatter.locale = Locale.current
  • 您希望 hh 而不是 HH 12 小时的上午/下午时间。 HH 是 24 小时时间
  • 您可以将 +0000 连接到接收到的字符串,并使用“yyyy-MM-dd HH:mm:ss a Z”日期格式将结果字符串转换为日期。注意,在这一步您不需要设置日期格式化程序的时区和本地。第二步依然有效。
  • 这里的问题是TimeZone(abbreviation: "UTC")实际上意味着你从服务器的时间应该是:2018-09-07 01:00:00 am+0100。传递 2018-09-07 01:00:00 am 你的意思是日期格式化程序的“2018-09-07 01:00:00 am+0000”

标签: ios swift date timezone


【解决方案1】:

12 小时制的格式说明符是 hh,而不是 24 小时制的 HH

HH 与 am/pm 说明符 a 结合使用会产生不正确的结果。

【讨论】:

    猜你喜欢
    • 2021-04-19
    • 2011-06-13
    • 2023-03-14
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    相关资源
    最近更新 更多