【问题标题】:Swift - convert date string from a "datepicker filled date field" to nsdateSwift - 将日期字符串从“日期选择器填充日期字段”转换为 nsdate
【发布时间】:2015-07-21 09:31:51
【问题描述】:

我有一个 UIDatepicker 附加到一个名为 dateField 的文本字段。当用户单击该字段时,会弹出一个 UIDatePicker 并且用户选择出生日期。该日期作为字符串保存到该 dateField 并根据用户位置(即美国 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

【问题讨论】:

    标签: swift nsdate nsdateformatter uidatepicker


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:
      let date: Date = myDatePicker.date
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-08
        • 1970-01-01
        • 2011-11-28
        • 2021-07-14
        • 1970-01-01
        相关资源
        最近更新 更多