Swift字符串日期到日期
我将Swift字符串日期到日期,swift,date,nsuserdefaults,nsdateformatter,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
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)代码>显式导致致命错误
有什么办法吗?将以前的代码更改为
dateFormatter.dateFormat = "\"yyyy-MM-dd'T'HH:mm:ssZ\""
随后返回格式整齐的日期。错误在于,从包含的UserDefaults中读取的日期可能是UserDefaults.standard.string(forKey:“分时”)
没有值或值不是字符串格式,并且您正在let dateString:string!=UserDefaults.standard.string(forKey:“timeShared”)
这里是导致致命错误的原因
最好添加一个条件if,然后使用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"))")
}
您确定在该日期字符串中有有效数据吗?您必须使用localeen_US_POSIX
,否则解析无法在所有情况下都正常工作。此外,当日期字符串
为nil
时,此操作也会崩溃。在这种情况下使用隐式展开的选项是非常危险的。请考虑使用<代码> ISO8601DATEFALTATER 。它在没有任何进一步设置的情况下解码此格式。也许最好将其作为日期对象存储在UserDefaults中?