【问题标题】:I'm trying to convert a string date into a Date but it keeps returning nil even after setting dateFormat我正在尝试将字符串日期转换为日期,但即使在设置 dateFormat 后它仍然返回 nil
【发布时间】:2021-08-24 20:23:21
【问题描述】:

我从let date = message.creationTs 检索的日期格式为creationTs: "2021-05-17 12:05:59"

我将 dateFormat 设置为 dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

但是let sentDate = dateFormatter.date(from: date) 返回 nil.. 有什么想法吗?

【问题讨论】:

  • 如果我运行你的代码,我会得到想要的输出。您可以在发生这种情况的地方发布您的完整代码(sn-p)吗?另外,检查message.creationTs 的格式是否正确。
  • @MartinFink 感谢您与我们联系。我附上了一个截图来向你展示我的调试。如果有帮助,我也可以发布代码本身。
  • 如何检查它是否为零?也许这是stackoverflow.com/questions/58108824/…的副本@
  • @JoakimDanielson 当我将鼠标悬停在 sentDate 上时,它显示为 nil .. 当我将它插入到调用中时,我会得到一个运行时错误,它是 nil
  • 如果您将相关代码复制到游乐场,是否可重现?如果是,请将该代码作为文本发布在您的问题中。

标签: swift date


【解决方案1】:

我认为你需要像这样设置时区

formatter.timeZone = TimeZone(secondsFromGMT: 0)

如果仍然得到 nil 值,请尝试设置所有这些:

formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.locale = Locale(identifier: "en_US_POSIX")

【讨论】:

  • 设置时区需要知道服务器使用的时区,不能随便设置任意时区。
  • 这在逻辑上是正确的。我前段时间也遇到过这个问题,这个解决方案奏效了。如果只是解析具有默认时区和/或语言环境的日期,则可以让您在不返回 nil 的情况下进行解析
  • 除非您知道原始日期使用的时区,否则它不会解决任何问题。
猜你喜欢
  • 2019-07-13
  • 2020-04-11
  • 2015-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多