【问题标题】:NSDateFormatter always returning nil.NSDateFormatter 总是返回 nil。
【发布时间】:2014-10-29 20:37:23
【问题描述】:

我正在尝试从 Django Rest Framework 转换日期时间字符串,例如: "2014-10-28T18:14:32.457" 转换成 Swift 字符串。我在操场上运行以下代码并且总是得到错误:

致命错误:在展开可选值时意外发现 nil

import Foundation

var mydate =  "2014-10-28T18:14:32.457"
let formatter = NSDateFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
formatter.timeStyle = .ShortStyle
formatter.dateStyle = .ShortStyle
var parsedDateTimeString = formatter.dateFromString(mydate)
formatter.stringFromDate(parsedDateTimeString!)

我认为这是因为 dateFromString 总是返回 nil。但我不知道为什么它返回零。我很确定我的 dateFormat 是正确的。我哪里错了?

【问题讨论】:

    标签: swift swift-playground


    【解决方案1】:

    如果您要设置dateFormat,则不应设置timeStyledateStyle(它们会覆盖您设置的格式)。您可能还想考虑使用可选绑定而不是强制展开来使您的代码更安全:

    var mydate = "2014-10-28T18:14:32.457"
    let formatter = NSDateFormatter()
    formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
    formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
    if let parsedDateTimeString = formatter.dateFromString(mydate) {
        formatter.stringFromDate(parsedDateTimeString)
    } else {
        println("Could not parse date")
    }
    

    在 Playground 中运行它并查看 stringFromDate 行会导致:

    2014-10-28T18:14:32.457

    【讨论】:

      猜你喜欢
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多