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”值。
我让一些用户就崩溃问题联系了他们,在比较了他们在数据库中的值之后,似乎他们都有一个 resetTimeString
和 03-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 点更改,因此不存在特定日期。
【讨论】:
你是个救星——你有什么解决这个问题的建议吗? 您可以要求Calendar
在03-14-2021 2:00 AM
之后或之前给您下一个(有效)时间
这些日期实际上是解码它们的机器的当地时间吗? (你会记录一个不存在的时间似乎很奇怪。)我认为它们实际上是 UTC 时间或其他时区的本地时间。如果是,则设置 DateFormatter 的 timezone
属性。
没错,日期是设备本地的
这是我在应用商店中的第一个应用,这是一次令人难以置信的学习体验,感谢你们的意见/智慧!以上是关于Swift 5 - 无法解释的 DateFormatter 崩溃的主要内容,如果未能解决你的问题,请参考以下文章
IOS Swift UITableView - 无法解释的边距 - 如何摆脱?
Swift 4.x/5.x 中是不是有多个全局变量副本?如果是这样,你如何阻止它?
Swift 新手,无法手动将 swift 2 转换为 swift 5