斯威夫特字符串日期

时间:2020-11-06 09:55:11

标签: swift date nsuserdefaults nsdateformatter

我从UserDefaults.standard中以字符串形式读取日期,格式如下:

“ 2020-11-06T05:20:20 + 0100”

我尝试使用以下代码将此字符串转换为日期

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "de_DE")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateString: String! = UserDefaults.standard.string(forKey: "timeShared")
let date = dateFormatter.date(from: dateString)

但是,结果始终为nil。显式使用let date = dateFormatter.date(from: dateString)!会导致致命错误。

任何想法怎么办?

2 个答案:

答案 0 :(得分:0)

将以前的代码更改为

dateFormatter.dateFormat = "\"yyyy-MM-dd'T'HH:mm:ssZ\""

随后返回一个整齐的日期。错误是从UserDefaults读取的日期包括""

答案 1 :(得分:0)

可能是UserDefaults.standard.string(forKey: "timeShared")没有没有值,或者该值不是字符串格式,而您正在let dateString: String! = UserDefaults.standard.string(forKey: "timeShared")中强制展开,这使得致命错误。

最好添加条件,然后使用 dateString

请参考以下代码。

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "de_DE")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
if let dateString: String = UserDefaults.standard.string(forKey: "timeShared") {
    let date = dateFormatter.date(from: dateString)
    print(date)
} else {
    print("Data in UserDefaults: \(UserDefaults.standard.string(forKey: "timeShared"))")
}