线上反应更新15.4版别后溃散,经过反应上来的截图来看,都是12小时制的时刻格局,

更新了最新版XCode之后,发现模拟器默许的时刻制式为12小时,但没有发生溃散状况;

因而我将测验机更新至了15.4版别,并运用12小时制进行测验。发现问题代码如下

       let dfmatter = DateFormatter()
    dfmatter.dateFormat = “yyyy/MM/dd HH:mm:ss”
    let date = dfmatter.date(from: "2020/02/02 17:22:38")
    let dateStamp:TimeInterval = date!.timeIntervalSince1970

iOS 15.4 12小时制 时间格式转换崩溃

此段时刻格局转化代码反应的date为nil,导致了溃散;

这里首先发现了一个代码标准的问题,原本能够不强解,就不会导致体系溃散的。因为这段代码也用了6年了,从OC迁移来Swift的,一般不会形成溃散,就没多想直接运用了强解,没想到在15.4版别中跌入坑中。

下来在看是为什么会导致其为nil的,

我将当前时刻戳依照“yyyy-MM-dd HH:mm:ss”的转化格局在真机设备上运转 打印如下

iOS15.4

  • 12小时制 2020/02/02 下午5:22:38

  • 24小时制 2020/02/02 17:22:38

其他体系版别

  • 12小时制 2020/02/02 17:22:38

  • 24小时制 2020/02/02 17:22:38

打印出了 dateformat对象的参数

iOS 15.4 12小时制 时间格式转换崩溃

应该是在DateFormat()在iOS15.4的体系版别进行了修正,所以出现这种异常状况。

查阅了开发者文档,发现一个技能问答中的状况相似

-   在 iOS 上,用户能够掩盖默许的 AM/PM 与 24 小时时刻设置(经过设置 > 常规 > 日期和时刻 > 24 小时时刻),这会导致 NSDateFormatter 重写您设置的格局字符串,这可能会导致您的时刻解析失利。

附开发者文档:developer.apple.com/library/arc…

测验加上local后,再次运转就会解析正常。

可是很奇怪的是,打印出来的dateformat中的local中是“zh_CN”格局。

最终附上可正常解析的代码:

       let dfmatter = DateFormatter()
    dfmatter.dateFormat = “yyyy/MM/dd HH:mm:ss”
        dfmatter.locale = Locale(identifier: "zh_CN")
    let date = dfmatter.date(from: "2020/02/02 17:22:38")
    let dateStamp:TimeInterval = date!.timeIntervalSince1970