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

标签 ios swift dateformatter

<分区>

我正在使用 dateformatter 在字符串和日期类型之间转换日期,以便通过 UIDatePicker 输入日期。当 View 加载时,如果存在已保存的日期字符串,则会将其放入日期文本字段(并正确输入)。当 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!)!
    }
}

返回:

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”指的是基于“一年中的一周”的日历,其中年份过渡发生在一周的边界上。对于大多数应用程序,您需要小写“y”,它指的是标准数字日历年。

关于ios - 从字符串转换为日期时,日期格式化程序减去一年并更改日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45203696/

相关文章:

swift - 如何使用 Swift 中的 Codable 转换带有可选小数秒的日期字符串?

ios - 即使导入了 UIKit,也使用未声明的类型 'UITableViewSection'

iphone - 在 4 或 5 个 x/y 坐标之间随机移动 UILabel

swift - 为用户注册添加 google drive 集成

ios - 弹出到上一个 View 的问题(导航 Controller )

Swift:如何使用时区缩写解析日期和时间字符串?

javascript - 使用 moment.js 或使用 JQuery/Javascript 以英文和日文显示日期

ios - 从 JPEG NSData 创建 UIImage 在 iOS 7.1 上很慢

ios - 核心数据发送和接收对象

ios - 在应用程序启动时获取在 UITabBarController 中选择的选项卡的标题