将字符串转换为日期,格式为dd MMM yyy

时间:2018-09-09 13:59:08

标签: ios swift xcode

我让用户使用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”?

5 个答案:

答案 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

设置UILabel的文本