Swift - 从" datepicker填充日期字段转换日期字符串"到nsdate

时间:2015-05-11 00:45:47

标签: swift nsdate nsdateformatter uidatepicker

我有一个UIDatepicker附加到名为dateField的文本字段。当用户点击该字段时,弹出UIDatePicker,用户选择出生日期。该日期将作为字符串保存到该dateField,并根据用户位置显示格式,即1990年5月4日在美国或1990年5月4日在澳大利亚。

稍后当他们按下保存按钮时,我想将日期保存到CoreData。我一直在尝试将日期字符串转换回NSDate,但我一直遇到问题,并获得一个零日期。

我认为在执行此操作之前需要设置NSDateFormatter语言环境和时区,因此我将其设置为用户的currentLocale和localTimeZone。我还认为我需要设置日期格式...如果我将日期格式设置为" dd MMM yyyy"如果用户区域设置是澳大利亚,则NSDate可以工作,但如果我将区域设置设置为USA,则无法使用NSDate。

如何设置日期格式,以便它允许dateFromString方法工作,而不管用户的语言环境如何。或者我应该以不同的方式这样做(即将生日作为字符串而不是NSDate唯一的时间点保存)

我的代码

    let dateStr = "20 Aug 1990" //suppose dateField contains this string as saved from a UIDatePicker (formatted according to the user's locale ... ie would be Aug 20 1990 in USA locale)
    let formatter = NSDateFormatter()
    formatter.locale = NSLocale.currentLocale()
    formatter.timeZone = NSTimeZone.localTimeZone()
    formatter.dateFormat = "dd MMM yyyy" //how can i set this to be non-locale specific

    var dobStr = dobField.text
    var dob: NSDate? = formatter.dateFromString(dobStr)
    println(dob) //prints nil if user locale is USA

2 个答案:

答案 0 :(得分:1)

let date: Date = myDatePicker.date

我还没有对它进行过测试,但the docs建议它应该有效。

答案 1 :(得分:1)

我想我已修好了。我认为导致问题的原因是我将locale设置为currentLocale但是然后向下2行指定dateFormat,如果它对应于当前语言环境但不是其他方式。无论如何,修复似乎只是指定区域设置,并让该设置决定使用的格式。