Swift - 将日期字符串从 "datepicker filled date field" 转换为 nsdate

Swift - convert date string from a "datepicker filled date field" to nsdate

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

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

我认为在执行此操作之前需要设置 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
let date: Date = myDatePicker.date

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

我想我已经解决了。我认为导致问题的原因是我将语言环境设置为 currentLocale,但随后 2 行指定了一个 dateFormat,如果它对应于当前语言环境,则该格式有效,否则无效。无论如何,修复似乎只是指定语言环境并让该设置决定使用的格式。