Swift 5 - 无法解释的 DateFormatter 崩溃

问题描述

我的应用程序使用一个计时器,该计时器使用 MM-dd-yyyy h:mm a 格式的字符串构造。当用户超过由 resetTimeString 指定的时间时,下一次重置时间是通过递增到第二天('a' 值不变)并将该值存储在数据库中来确定的。简而言之,它代表一个每日计时器,每个用户都可以选择自己的“a”值。

我有许多用户就崩溃问题与我联系,在比较他们在数据库中的值后,他们似乎都有 resetTimeString03-14-2021 2:00 AM

    var resetTime: Date?
    let resetTimeFormatter = DateFormatter()

    resetTimeFormatter.dateFormat = "MM-dd-yyyy h:mm a"
    
    if let resetString = resetTimeString { //value in DB
        resetTime = resetTimeFormatter.date(from: resetString)! // <- Only crashes with 03-14-2021 2:00 AM 
    }

我针对 resetTimeString 值测试了一系列不同的值,它们都运行良好:

03-13-2021 2:00 AM

03-14-2021 1:00 AM

03-14-2021 3:00 AM

03-15-2021 2:00 AM

我对这次崩溃感到非常困惑,并认为我会寻求一些帮助; 感谢任何帮助

解决方法

在您的语言环境中,夏令时在 2021 年 3 月 14 日凌晨 2 点更改,因此特定日期不存在。