【问题标题】:DateFormatter does NOT convert specific dates (Swift)DateFormatter 不转换特定日期 (Swift)
【发布时间】:2021-09-16 21:27:10
【问题描述】:

我在操场和应用程序上有以下代码,而 DateFormatter 仅针对日期“1990-10-21”返回 nil:


let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "YYYY-MM-dd"

let date1 = dateFormatter.date(from: "1990-10-20") // "Oct 20, 1990 at 12:00 AM"
let date2 = dateFormatter.date(from: "1990-10-21") // nil
let date3 = dateFormatter.date(from: "1990-10-22") // "Oct 22, 1990 at 12:00 AM"

在 1989 年、2021 年进行测试...运行良好...

有没有人知道这是为什么?是bug吗?

【问题讨论】:

    标签: ios swift nsdateformatter date-formatting


    【解决方案1】:

    您的代码存在三个问题。第一个YYYYYearForWeekOfYear。你需要的是yyyy。其次,你没有打发时间。请注意,并非所有日期都从 12:00am(夏令时转换日期)开始。您可以通过设置日历或将有效时间(下午 12 点)与日期一起传递来防止日期格式化程序返回 nil。第三,在使用固定日期格式时,您应该始终将语言环境设置为 "en_US_POSIX"


    let dateFormatter = DateFormatter()
    dateFormatter.calendar = .current
    dateFormatter.locale = .init(identifier: "en_US_POSIX")
    dateFormatter.dateFormat = "yyyy-MM-dd"
    
    let date1 = dateFormatter.date(from: "1990-10-20") // "Oct 20, 1990 at 12:00 AM"
    let date2 = dateFormatter.date(from: "1990-10-21") // "Oct 21, 1990 at 1:00 AM"
    let date3 = dateFormatter.date(from: "1990-10-22") // "Oct 22, 1990 at 12:00 AM"
    

    【讨论】:

    • 我在我的代码上使用了语言环境,只是在此处和操场上删除了,因为它不会影响问题。我尝试了yyyy,但它也没有影响问题,但我明白你的意思,我会继续使用yyyy。设置日历是我从未尝试解决的问题。谢谢
    • YYYY 在接近新年的日期会给你错误的结果
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多