【问题标题】:Date formatter subtracting year by one and changing day when converting from string to date [duplicate]从字符串转换为日期时,日期格式化程序将年份减一并更改日期[重复]
【发布时间】:2017-12-25 12:00:57
【问题描述】:

我正在使用 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 函数,它会不断减去一年并更改日期。

保存为字符串的日期:1976 年 12 月 19 日 保存日期转换为日期: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。

【问题讨论】:

    标签: ios swift dateformatter


    【解决方案1】:

    将您的格式字符串更改为:“MM/dd/yyyy”,它应该可以正常工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-28
      • 2020-08-26
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多