日期格式“dd-MMM-yyyy”为9月,现在是9月。不是 9 月,所以转换导致 nil

Date format "dd-MMM-yyyy" for September now Sept. Not Sep so converting causes nil

提问人:GDev 提问时间:3/20/2022 更新时间:3/20/2022 访问量:3004

问:

将 iPad 更新到 iOS 15.4。

现在,当存储的月份格式“MMM”= Sep时,使用 DateFormatter 的字符串到日期的转换返回 nil。

当MMM月份=9月时工作正常。

在 iOS 15.3 及更早版本中有效。

问题是我已创建日期并将其存储为 dd-Sep-2021。

    let dateFormat = "dd-MMM-yyyy"
    let dateFormatter = DateFormatter()
    dateFormatter.calendar = Calendar(identifier: .iso8601)
    dateFormatter.dateFormat = dateFormat
    let startDate = dateFormatter.date(from: appStartDate) //Returns nil if “11-Sep-2021” and crashes
    print(String(describing: startDate))

对此代码进行了一些调查,发现 Sep 有效,而 Sep 无效。

    let x = "-Sep-2021" // This returns nil
    //let x = "-Sept-2021" // This works
    var z: String = ""
    let i = 1...30
    for n in i {
        z = String(n) + x
        guard let y = dateFormatter.date(from: z) else {
            print(String(n)) // will print if nil
            continue
        }
        print(\(String(describing: y))) //will print if string converted to date
    }

所有其他 3 个字符的月份格式都有效。

知道事情是否发生了变化吗?

Swift null DateFormatter

评论

1赞 GDev 3/20/2022
作为一种解决方法。我已将其添加到我的代码中。appStartDate = appStartDate.replacingOccurrences(of: “Sep”, with: “Sept”)
4赞 vadian 3/20/2022
强烈建议在处理自定义日期格式时将日期格式化程序设置为。你也试过日历吗?Localeen_US_POSIX.gregorian
4赞 GDev 3/20/2022
谢谢vadain。用过了,它起作用了。干杯。dateFormatter.locale = Locale(identifier: "en_US_POSIX")
0赞 Yessen Yermukhanbet 4/15/2022
苹果有没有宣布将从 iOS 15.4 开始更改?经过数百万次测试调试后,发现这一点非常沮丧,不明白为什么它返回 nil lol
0赞 Matthew An 4/27/2022
遇到同样的问题,以为是iOS15.4 SDK问题。

答: 暂无答案