【问题标题】:I get nil when using NSDateFormatter in swift在 swift 中使用 NSDateFormatter 时我得到 nil
【发布时间】:2015-02-26 18:29:58
【问题描述】:

这是我的代码:

println(myStringDate)    // 2015-02-26T17:46:34.000Z
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "YYYY-MM-DDTHH:mm:ss.sssZ"
let myDate = dateFormatter.dateFromString(myStringDate)
println(myDate)        // nil

为什么是零?我做错了什么?

【问题讨论】:

标签: ios swift nsdate nsdateformatter


【解决方案1】:

您的问题是如何设置日期格式。因为你的字符串中有一个T,所以你需要“转义”它并说它不应该影响日期的格式。

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

如您所见,我已将sss 更改为代表毫秒的SSS,还将年份YYYY 更改为小写yyyy,也与DD 相同。您必须非常小心,何时在 Dateformat-strings 中使用大写和小写字母。

检查@HotLicks link in the comments,它显示了对日期格式使用的一个很好的概述。

【讨论】:

  • 日期格式还是有一些错误,比如stackoverflow.com/questions/28748162/…比较。
  • 别忘了提到 Y 代表 YearOfWeek
  • @LeonardoSavioDabus 完成。比较笼统一点。感谢您的意见。
  • @Christian 一点也不一般。如果您使用它,它看起来像是在工作,但它可能会导致日期更旧的日期不同。如果与今天的日期一起使用,它可能不会有问题。
  • 请勿在格式字符串中引用Z。那是时区说明符。如果您引用它,那么日期/时间字符串将被视为本地时间而不是祖鲁时间。这不是你想要的。
【解决方案2】:

我知道为时已晚,但是

dateFormatter.dateFormat = "YYYY-MM-DD'T'HH:mm:ss.sss'Z'"

应该是

dateFormatter.dateFormat = "YYYY-MM-DD'T'HH:mm:ss.SSS'Z'"

因为,

1)

ss - seconds
SSS - fractional second

sss != SSS

2)

  T -> 'T'; S -> 'S'

还有nice tutorial

【讨论】:

    猜你喜欢
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    相关资源
    最近更新 更多