Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift字符串日期到日期_Swift_Date_Nsuserdefaults_Nsdateformatter - Fatal编程技术网

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"))")
}

您确定在该
日期字符串中有有效数据吗?您必须使用locale
en_US_POSIX
,否则解析无法在所有情况下都正常工作。此外,当
日期字符串
nil
时,此操作也会崩溃。在这种情况下使用隐式展开的选项是非常危险的。请考虑使用<代码> ISO8601DATEFALTATER 。它在没有任何进一步设置的情况下解码此格式。也许最好将其作为日期对象存储在UserDefaults中?