【问题标题】:Unable to convert string to date, string contains dot with 6 character [duplicate]无法将字符串转换为日期,字符串包含 6 个字符的点 [重复]
【发布时间】:2021-06-25 10:05:49
【问题描述】:

我坚持将字符串转换为日期,我的日期字符串是 “2021-03-25T06:35:36.372245” 无法将其转换为日期格式。我使用了代码但无法转换,我得到了零。 我的代码是

   let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-ddTHH:mm:ss.ZZZZZZ" ( also tried SSSSSS)
    let dte = dateFormatter.date(from: dateTime)

但无法解析它。请帮帮我。

【问题讨论】:

  • 试试这个格式 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
  • 对我来说似乎不是时区,所以不是“Z”,而是“S”更多的秒数。试试"yyyy-MM-dd'T'HH:mm:ss.SSSSSS" 如果你打印dateFormatter.string(from: Date()),你会看到T 坏了,你需要转义它。
  • 感谢@Larme 它的工作我使用了相同的但没有使用 T 和 ''('T'),T 是分隔符,所以他们需要用 '' 写 T。

标签: swift date swift5


【解决方案1】:

你忘了'' arround T

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSSSS"
dateFormatter.timeZone = TimeZone(identifier: "UTC")

【讨论】:

  • 改格式后,时间变“可选(2021-03-25 01:05:36 +0000)”如何匹配
  • 你在 5.5 GMT 时区见编辑
  • 谢谢,它的工作,但如果我的服务器改变位置,那么它就不会按照那个工作,所以我们可以在不改变区域的情况下将字符串更改为日期
  • 不,我们不能,因为如果你不设置它,它会采用默认区域
【解决方案2】:

这样做

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
let dte = dateFormatter.date(from: dateTime)

【讨论】:

  • 这是错误的。你永远不应该逃避Z。顺便说一句,日期字符串中没有时区,因此您应该将其删除并将 dateFormatter 的时区设置为距 GMT 零秒
  • 抱歉是我的错,谢谢指点
猜你喜欢
  • 2014-12-08
  • 2016-12-24
  • 2012-08-11
  • 2020-03-11
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多