Swift 5 - 无法解释的 DateFormatter 崩溃

Posted

技术标签:

【中文标题】Swift 5 - 无法解释的 DateFormatter 崩溃【英文标题】:Swift 5 - Unexplainable DateFormatter Crash 【发布时间】:2021-03-13 15:17:17 【问题描述】:

我的应用程序使用了一个计时器,该计时器是使用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

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

【问题讨论】:

相关:***.com/q/24088730/1187415, ***.com/q/40284272/1187415. 【参考方案1】:

在您的区域设置中,夏令时在 2021 年 3 月 14 日凌晨 2 点更改,因此不存在特定日期。

【讨论】:

你是个救星——你有什么解决这个问题的建议吗? 您可以要求Calendar03-14-2021 2:00 AM 之后或之前给您下一个(有效)时间 这些日期实际上是解码它们的机器的当地时间吗? (你会记录一个不存在的时间似乎很奇怪。)我认为它们实际上是 UTC 时间或其他时区的本地时间。如果是,则设置 DateFormatter 的 timezone 属性。 没错,日期是设备本地的 这是我在应用商店中的第一个应用,这是一次令人难以置信的学习体验,感谢你们的意见/智慧!

以上是关于Swift 5 - 无法解释的 DateFormatter 崩溃的主要内容,如果未能解决你的问题,请参考以下文章

无法解释的内存泄漏 swift iOS

IOS Swift UITableView - 无法解释的边距 - 如何摆脱?

Swift 4.x/5.x 中是不是有多个全局变量副本?如果是这样,你如何阻止它?

Swift 新手,无法手动将 swift 2 转换为 swift 5

Swift:无法将“NSManagedObject”类型的值转换为“data Model.Entity”

Swift 5 - 无法通过 FCM 接收推送通知