我从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)!
会导致致命错误。
任何想法怎么办?
答案 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"))")
}