【问题标题】:nil NSDate from DateFormatter来自 DateFormatter 的 nil NSDate
【发布时间】:2023-03-05 00:38:01
【问题描述】:

我正在尝试使用此代码将 String 转换为 NSDate

let dateString = data as! String
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = formatter.date(from: dateString)
let Calendar = NSCalendar(calendarIdentifier: NSCalendar.Identifier.gregorian)
let unitFlags: NSCalendar.Unit = [.hour, .day, .month, .year]
let components = Calendar?.components(unitFlags, from: date!)

dateString"2017-04-03T18:50:34.3042751+04:30",但我得到fatal error: unexpectedly found nil while unwrapping an Optional value 的最后一行。我做错了什么?

【问题讨论】:

  • 您的日期格式与您的 dateString 不匹配
  • "2017-04-03T18:50:34.3042751+04:30" 应该是"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSXXXXX"
  • "yyyy-MM-dd'T'HH:mm:ss.SSSXXXXX" 也应该可以工作
  • 不要在代码中强制解包 - 如果值可能为 nil,请正确处理。

标签: ios swift nsdate dateformatter


【解决方案1】:

如下更改日期格式

formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SZ"

编辑:如果您想要更精确,可以再添加两个S,例如

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

S 最多可以工作 3 次,之后它将无法工作。如果您需要解析小数点后 3 位后的小数秒,那么您需要查看此线程:https://stackoverflow.com/a/27412262/468724

【讨论】:

  • 请注意 Z 与原始日期字符串不匹配。如果你从使用它的日期得到一个字符串,它将导致"-0300" 而不是"-03:00"
  • 是的@LeoDabus你是对的,但我猜OP只需要解析日期
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多