日期格式化程序逐年减去并从字符串转换为日期时更改日期

时间:2017-07-20 01:36:44

标签: ios swift dateformatter

我使用dateformatter在字符串和日期类型之间转换日期,以便通过UIDatePicker输入日期。当视图加载时,如果保存的日期字符串存在,则将其放入日期文本字段(并正确输入)。当dateformatter将字符串转换为日期时,它将返回错误的日期。 (始终是去年12月20日。)

let df = DateFormatter()
df.dateFormat = "MM/dd/YYYY"

func setDatePickerDate() {
    if dobText.text != "" {
        print("\n\nSaved date as string: \(dobText.text!)")
        let testDate = df.date(from:dobText.text!)
        print("Saved date converted to date: \(testDate!)")
        print("Date converted back to string: \(df.string(from: testDate!))")
        dobPicker?.date = df.date(from: dobText.text!)!
    }
}

返回:

  

保存日期为字符串:06/07/1977   保存日期转换为日期:1976-12-19 06:00:00 +0000   日期转换回字符串:12/19/1976

如果我继续运行setDatePicker函数,它会减去一年并改变一天。

  

保存日期为字符串:12/19/1976   保存日期转换为日期:1975-12-21 06:00:00 +0000   日期转换回字符串:12/21/1975

     

保存日期为字符串:12/21/1975   保存日期转换为日期:1974-12-22 06:00:00 +0000   日期转换回字符串:12/22/1974

编辑:注意到它会循环显示19-25之间的日期,将日期加1,直到达到25,然后返回到19。

1 个答案:

答案 0 :(得分:1)

将您的格式字符串更改为:“MM / dd / yyyy”,它应该按照书面形式工作。

Unicode Technical Standard #35 Locale Data Markup Language中的资本“Y”指的是基于“一周中的一周”的日历,其中年份转换发生在一周边界上。对于大多数应用程序,您需要小写“y”,它指的是标准数字日历年。