从字符串转换为日期时,日期格式化程序减去一年并更改日期
Date formatter subtracting year by one and changing day when converting from string to date
我正在使用 dateformatter 在字符串和日期类型之间转换日期,以便通过 UIDatePicker 输入日期。当视图加载时,如果存在已保存的日期字符串,则会将其放入日期文本字段(并正确输入)。当 dateformatter 将字符串转换为日期时,它 returns 是错误的日期。 (始终是前一年的 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!)!
}
}
哪个returns:
Saved date as string: 06/07/1977
Saved date converted to date: 1976-12-19 06:00:00 +0000
Date converted back to string: 12/19/1976
如果我保留 运行 setDatePicker 函数,它会不断减去一年并更改日期。
Saved date as string: 12/19/1976
Saved date converted to date: 1975-12-21 06:00:00 +0000
Date converted back to string: 12/21/1975
Saved date as string: 12/21/1975
Saved date converted to date: 1974-12-22 06:00:00 +0000
Date converted back to string: 12/22/1974
等等
编辑:刚注意到它在 19-25 之间循环,在日期上加 1,直到达到 25,然后返回到 19。
将您的格式字符串更改为:"MM/dd/yyyy",它应该会像写的那样工作。
Unicode Technical Standard #35 Locale Data Markup Language 中的大写 "Y" 指的是基于 "week of year" 的日历,其中年份转换发生在一周的边界上。对于大多数应用程序,您需要小写 "y",它指的是标准数字日历年。
我正在使用 dateformatter 在字符串和日期类型之间转换日期,以便通过 UIDatePicker 输入日期。当视图加载时,如果存在已保存的日期字符串,则会将其放入日期文本字段(并正确输入)。当 dateformatter 将字符串转换为日期时,它 returns 是错误的日期。 (始终是前一年的 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!)!
}
}
哪个returns:
Saved date as string: 06/07/1977 Saved date converted to date: 1976-12-19 06:00:00 +0000 Date converted back to string: 12/19/1976
如果我保留 运行 setDatePicker 函数,它会不断减去一年并更改日期。
Saved date as string: 12/19/1976 Saved date converted to date: 1975-12-21 06:00:00 +0000 Date converted back to string: 12/21/1975
Saved date as string: 12/21/1975 Saved date converted to date: 1974-12-22 06:00:00 +0000 Date converted back to string: 12/22/1974
等等
编辑:刚注意到它在 19-25 之间循环,在日期上加 1,直到达到 25,然后返回到 19。
将您的格式字符串更改为:"MM/dd/yyyy",它应该会像写的那样工作。
Unicode Technical Standard #35 Locale Data Markup Language 中的大写 "Y" 指的是基于 "week of year" 的日历,其中年份转换发生在一周的边界上。对于大多数应用程序,您需要小写 "y",它指的是标准数字日历年。