我让用户使用UIDatePicker
输入DOB,然后将其放入UITextField
(作为字符串)中,格式为dd MMM yyyy
。例如,1999年9月12日的DOB将显示为1999年9月12日。
如何使用DateFormatter()进行转换并将其存储在属性类型为Date的CoreData实体中?
使用
let dob = "12 Sep 1999"
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
dateFormatter.locale = Locale(identifier: "en_GB")
dateFormatter.date(from: dob)
返回Sep 12, 1999 at 12:00 AM
,这很好,但是我不知道如何摆脱“在12:00 AM”?
答案 0 :(得分:2)
你在这里想要什么? Date
类包含一个时间戳,一个带有时间的日期。您无法避免将时间作为Date
的一部分。如果您只想处理一天,您的代码可以忽略时间。
答案 1 :(得分:1)
实际上,从dateFormatter.date
返回的是一个Date
对象。您可以将其保存为变量,并使用CoreDate
作为Date
对象进行存储。
您所看到的只是描述对象的字符串-因此您无需摆脱“在12:00”的问题。
答案 2 :(得分:1)
Date
实例是一个时间点(实际上是Double
值)。它不知道时区,语言环境和任何日期格式。
反过来看:
在您的NSManagedObject
子类中,将该属性声明为Date
@NSManaged public var dob: Date
从日期选择器中获取date
并保存。
在NSManagedObject
子类中添加一个计算属性,以便仅将日期部分显示为字符串
var dobString : String {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
dateFormatter.locale = Locale(identifier: "en_GB")
return dateFormatter.string(from: dob)
}
答案 3 :(得分:0)
您看到的只是日期的description
属性
let date = dateFormatter.date(from: dob)! //"Sep 12, 1999 at 12:00 AM"
dateFormatter.string(from: date) //"12 Sep 1999"
答案 4 :(得分:-1)
已解决代码:
let dob = patientResult?.value(forKeyPath: "dob") as! NSDate
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .medium
dateFormatter.timeStyle = .none
dateFormatter.locale = Locale(identifier: "en_GB")
let dateString = dateFormatter.string(from: dob as Date)
然后我用dob2.text = dateString