【问题标题】:Date Formatter returns when using DateFormatter().date(from: String)使用 DateFormatter().date(from: String) 时返回的日期格式化程序
【发布时间】:2019-09-22 12:28:26
【问题描述】:

我有以下代码:

//converting date into desired format
    let formatterGet = DateFormatter()
    formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss zzzz" //"2014-09-21 21:00:00  0000"
    let date = formatterGet.date(from: birthday) 
    print(date)

    // "decoding" the new format to be shown in the UI
    let formatterShow = DateFormatter()
    formatterShow.dateFormat = "MMM dd, yyyy"
    birthdayTextField.text = formatterShow.string(from: date ?? Date())

问题是当我在控制台中打印日期时,它每次都显示 nil。我该如何解决?

【问题讨论】:

  • 在您评论的日期中,时间和时区之间有 2 个空格。这是一个错字还是它实际上是这样的?
  • 再确认一下,你确定birthday 的格式是“2014-09-21 21:00:00 0000”的评论格式吗?此外,在评论中,“21:00:00”和“0000”之间有一个双空格
  • @alxlives 实际上有两个空格“21:00:00”和“0000”,但是在迁移到 iOS13 之前它是这样工作的,现在它没有。我尝试了两个空格,但它仍然不起作用。
  • @Fogmeister 实际上有两个空格,但是当我将它们添加到 dateFormat 字符串时,它仍然返回 nil。
  • 0000 不能被任何时区说明符解码,除非您添加 +- 符号。 zzzz 并不代表你认为的那样。见unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns

标签: swift nsdateformatter ios13 dateformatter


【解决方案1】:

问题在于您的DateFormatter 转换。你有两个选择:

1:从格式化程序和日期中删除zzzz

    let birthday = "2014-09-21 21:00:00"
    let formatterGet = DateFormatter()
    formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss"
    let date = formatterGet.date(from: birthday)

    print(date)

输出:

    Optional(2014-09-22 00:00:00 +0000)

2:在日期上添加+符号:

   let birthday = "2014-09-21 21:00:00 +0000"
   let formatterGet = DateFormatter()
   formatterGet.dateFormat = "yyyy-MM-dd HH:mm:ss zzzz"
   let date = formatterGet.date(from: birthday)

   print(date)

输出:

   Optional(2014-09-22 00:00:00 +0000)

【讨论】:

  • 谢谢,但我尝试删除 zzzz,但它不起作用。另外,我不能将“+”添加到“0000”,因为它是从服务器返回的
  • @Nikkko "+0000" 表示 UTC 时间。是的,把它加回来。不要将它从您的字符串 "2014-09-21 21:00:00 +0000" 中删除并使用日期格式 "yyyy-MM-dd HH:mm:ss Z"。不要忘记将日期格式化程序语言环境设置为"en_US_POSIX",如果您需要其他方式,请将时区设置为从 gmt 开始的零秒
  • 问题是服务器日期格式不兼容。如果服务器日期无法更改,您是否考虑过将其替换在前面,例如:birthday = birthday.replacingOccurrences(of: " 0000", with: "+0000")
  • @alxlives 我最终使用了您的方法,到目前为止,它对我来说非常有用。非常感谢!!
  • 如果服务器日期字符串始终以两个空格和0000 结尾,则使用"yyyy-MM-dd HH:mm:ss 0000" 作为日期格式。
猜你喜欢
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2018-09-16
  • 1970-01-01
  • 2023-01-03
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多