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

时间:2019-04-20 17:43:55

标签: swift date

我想记录她进入文本字段的历史。我打算向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

4 个答案:

答案 0 :(得分:6)

以下内容将Date对象另存为Double(也称为TimeInterval)。这样可以避免任何日期格式。格式化可能会失去精度,这是不必要的,因为该字符串不适合用户阅读。

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

// read
let date = Date(timeIntervalSince1970: UserDefaults.standard.double(forKey: key))

答案 1 :(得分:0)

您的问题是您要从用户默认存储中检索NSDate,然后尝试将它们分配给String(格式日期)。

尝试一下;

  formatteddate = formatter.string(from: RetrivedDate as Date)

答案 2 :(得分:0)

您可以设置日期并使用用户默认设置存储持久性:

UserDefaults.standard.set(Date(),forKey:”keyname”) as? Date

还记得使用条件强制转换运算符吗?避免崩溃。

要将日期另存为字符串,您可以通过以下文章进行操作: Convert NSDate to String in iOS Swift

答案 3 :(得分:0)

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

//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))

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