关于iOS15.4的NSDateFormatter的适配问题

最近我们在定位一个只在iOS15.4出现的倒计时不工作的问题,发现在iOS15.4系统中,如果用户在大陆地区(语言地区设置为中国大陆),并且设置了12小时制(这是出现问题的前提条件),并且使用fixed-format 格式化内容(比如HH:mm之类的formate string),并且没有主动设置NSDateFormatterlocale属性,NSDateFormatter生成的格式化日期字符串跟以往的系统的不一样。
以下是stringFromDate方法的行为差异情况:

  • iOS15.4系统的运行表现

    image.png

  • iOS15.4以下系统的运行表现

    image.png

从以上两张图中可以发现,iOS15.4的运行结果是2022-03-15 2:34 PM,而iOS15.4以下系统的运行结果是2022-03-15 14:56

  • 解决方案
    image.png

根据苹果官方文档,早在iOS10就建议开发在使用DateFormatter的时候需要指定locale属性。也就是说使用fixed formate的时候不指定locale的话,是有输出内容不符合预期的隐患的。

不管这是苹果给不按照规范开发的开发者挖了一个大坑。。还是系统的一个bug
大家都引以为鉴吧。

你可能感兴趣的:(关于iOS15.4的NSDateFormatter的适配问题)