【问题标题】:Swift Date Formatter - Different Date from StringSwift 日期格式化程序 - 与字符串不同的日期
【发布时间】:2020-11-07 17:17:51
【问题描述】:

我有以下字符串,我想将其转换为日期:

"November 8, 2018 12:30 PM"

接下来要做的是:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMM d, yyyy h:mm a"
let date = dateFormatter.date(from: "November 8, 2018 12:30 PM")

但我得到了

2018-11-08 18:30:00 +0000

我不知道为什么。有什么建议吗?

【问题讨论】:

  • 使用dateFormatter.string(from: date)。请注意,您使用了错误的 dateFormatt。 MMM 是 3 个字母月份,您需要使用 MMMM "MMMM d, yyyy h:mm a"
  • 在设置 dateFormat 之前不要忘记将 dateFormatter 的语言环境设置为“en_US_POSIX”

标签: ios swift string date date-format


【解决方案1】:

有一些我喜欢使用的工具https://nsdateformatter.com/

您明确查找的格式是"MMMM d, yyyy h:m a"

你的代码应该是这样的:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM d, yyyy h:m a"
let date = dateFormatter.date(from: "November 8, 2018 12:30 PM")
let dateString = dateFormatter.string(from: date!)

【讨论】:

  • 顺便说一句,如果设备 12-24 小时设置设置为 24 小时,这可能会崩溃
【解决方案2】:

日期格式化程序隐式使用您当前的时区,这意味着它将该日期解释为本地时间,然后将其转换为没有时区 (UTC+0) 的日期对象。看起来您的当地时间是 UTC-6?如果我运行你的代码,我会得到 2018-11-8 17:30:00 +0000,因为我住在 UTC-5

如果您使用相同的格式化程序将日期转换回字符串,您将得到与输入相同的字符串

dateFormatter.string(from: date)

因此不会丢失任何信息。如果您的字符串需要在当前时区以外的其他时区进行解释,则需要在解析之前设置格式化程序的 timeZone 属性。

【讨论】:

    猜你喜欢
    • 2020-08-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 2017-06-16
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多