如何在用户默认值中存储日期?

sta*_*kor 19 date swift

我想记录她进入文本字段的历史。我打算用 UserDefaults 注册它。但是,当我尝试使用 UserDefaults 保存它时,“无法将类型为 'nsdate'?' 的值分配给类型 'String'” 错误。我认为它不接受文本字段数据,因为它是字符串。我怎样才能在记忆中保存历史?

formatteddate 和 formatteddate2 给出了这个错误。日期输出如下:20/04/2019 20:23

let token = try? keychain.getString("chipnumbernew")
        chip1InfoString = token

        var time = NSDate()
        var formatter = DateFormatter()
        formatter.dateFormat = "dd/MM/yyyy HH:mm"
        var formatteddate = formatter.string(from: time as Date)
        var formatteddate2 = formatter.string(from: time as Date)

        timertextNew.text = formatteddate
        timertext2New.text = formatteddate2


        let RetrivedDate = UserDefaults.standard.object(forKey: "timertext") as? NSDate

       formatteddate = RetrivedDate

        let RetrivedDate2 = UserDefaults.standard.object(forKey: "timertext2") as? NSDate
        formatteddate2 = RetrivedDate2
Run Code Online (Sandbox Code Playgroud)

Joa*_*son 54

如果您只想显示日期值,您可以将其转换并存储为字符串,否则您在阅读后转换/格式化它,无论哪种方式,您都应确保在保存和阅读时使用相同的类型

//save as Date
UserDefaults.standard.set(Date(), forKey: key)

//read
let date = UserDefaults.standard.object(forKey: key) as! Date
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
print(df.string(from: date))
Run Code Online (Sandbox Code Playgroud)
// save as String
let df = DateFormatter()
df.dateFormat = "dd/MM/yyyy HH:mm"
let str = df.string(from: Date())
UserDefaults.standard.setValue(str, forKey: key)

// read
if let strOut = UserDefaults.standard.string(forKey: key) {
    print(strOut)
}
Run Code Online (Sandbox Code Playgroud)


jam*_*her 23

以下将Date对象另存为Double(aka TimeInterval)。这避免了任何日期格式。格式化可能会失去精度,并且是不必要的,因为该字符串不是供用户阅读的。

// save
UserDefaults.standard.set(Date().timeIntervalSince1970, forKey: key)

// read
let date = Date(timeIntervalSince1970: UserDefaults.standard.double(forKey: key))
Run Code Online (Sandbox Code Playgroud)