let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "HH:mm "
let selectedDate = dateFormatter.string(from: sender.date)
UserDefaults.standard.set(selectedDate, forKey: "date")
print(selectedDate)
\\method to reload the selected time inside the viewdidLoad func
let selectedDate = UserDefaults.standard.object(forKey: "date")
example.setDate(selectedDate as! Date ?? Date(), animated: false)
但是当我运行应用程序时,它会返回此错误
无法转换类型' __ NSCFString' (0x108e8b4f0)到' NSDate' (0x108e8c0d0)。
我转换为HH:mm因为我想只记录这种格式的时间,但我不知道我将如何处理它
答案 0 :(得分:5)
Andre你在UserDefaults
中保存String值并尝试从String设置NSDate
。如果您只关注时间,那么我的建议是将日期保存在UserDefaults
中,并根据您的要求获得time
格式。
以下是保存和检索时间的步骤:
保存:
func datePickerChanged(_ sender: UIDatePicker){
UserDefaults.standard.set(sender.date, forKey: "date")
}
用于检索:
func getTime(){
let date = UserDefaults.standard.object(forKey: "date") as! Date
let dateFormatter = DateFormatter()
dateFormatter.locale = NSLocale.current
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone! //Set your own time zone here.
dateFormatter.dateFormat = "HH:mm"
print(dateFormatter.string(from: date as Date))
example.setDate(date, animated: false)
}
希望它能帮到你,节省你的时间。
答案 1 :(得分:1)
您应该将Date对象本身存储在UserDefaults
而不是其String表示中。在大多数用例中,存储Date
对象更有意义,因为Date
个对象代表绝对时间点,因此您可以将它们用于日期比较或将它们转换为本地时间。 / p>
此外,看起来setDate
函数实际上需要一个Date
对象而不是一个String,因此生成一个Date的String表示然后存储它是没有意义的。 UserDefaults
。
//Save the Date object
UserDefaults.standard.set(sender.date, forKey: "date")
//Retrieve the Date object, if it cannot be retrieved, use the current Date
if let selectedDate = UserDefaults.standard.object(forKey: "date") as? Date {
example.setDate(selectedDate, animated: false)
} else {
example.setDate(Date(), animated: false)
}