Swift-将日期字符串从“转换”;日期选择器填充的日期字段;至今

Swift-将日期字符串从“转换”;日期选择器填充的日期字段;至今,swift,nsdate,nsdateformatter,uidatepicker,Swift,Nsdate,Nsdateformatter,Uidatepicker,我在一个名为dateField的文本字段上附加了一个UIDatepicker。当用户单击该字段时,会弹出一个UIDatePicker,用户会选择出生日期。该日期保存为该日期字段的字符串,并根据用户位置(即1990年5月4日在美国或1990年5月4日在澳大利亚)显示格式 稍后,当他们按下保存按钮时,我想将日期保存到CoreData。我一直在尝试将日期字符串转换回NSDate,但我一直遇到问题并得到一个零日期 我认为在执行此操作之前需要设置NSDateFormatter区域设置和时区,因此我将其设置

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

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

我认为在执行此操作之前需要设置NSDateFormatter区域设置和时区,因此我将其设置为用户的currentLocale和localTimeZone。我还认为我需要设置一个日期格式。。。如果我将日期格式设置为“dd-MMM-yyyy”,则如果用户区域设置为澳大利亚,则NSDate有效,但如果我将区域设置为美国,则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
我还没有测试过它,但建议它应该可以工作

我还没有测试过它,但建议它应该可以工作

我还没有测试过它,但建议它应该可以工作


我还没有测试它,但建议它应该可以工作。

我想我已经修复了它。我认为造成问题的原因是我将locale设置为currentLocale,但是接下来的两行指定了一个dateFormat,如果它与当前的locale相对应,那么这个dateFormat就可以工作,否则就不能工作。无论如何,修复似乎只是指定区域设置,并让该设置指定使用的格式。

我想我已经修复了它。我认为造成问题的原因是我将locale设置为currentLocale,但是接下来的两行指定了一个dateFormat,如果它与当前的locale相对应,那么这个dateFormat就可以工作,否则就不能工作。无论如何,修复似乎只是指定区域设置,并让该设置指定使用的格式。

我想我已经修复了它。我认为造成问题的原因是我将locale设置为currentLocale,但是接下来的两行指定了一个dateFormat,如果它与当前的locale相对应,那么这个dateFormat就可以工作,否则就不能工作。无论如何,修复似乎只是指定区域设置,并让该设置指定使用的格式。

我想我已经修复了它。我认为造成问题的原因是我将locale设置为currentLocale,但是接下来的两行指定了一个dateFormat,如果它与当前的locale相对应,那么这个dateFormat就可以工作,否则就不能工作。无论如何,修复看起来只是指定区域设置,并让该设置指定使用的格式

let date: Date = myDatePicker.date