最近我们在定位一个只在iOS15.4
出现的倒计时不工作的问题,发现在iOS15.4
系统中,如果用户在大陆地区(语言地区设置为中国大陆)
,并且设置了12小时制
(这是出现问题的前提条件),并且使用fixed-format
格式化内容(比如HH:mm
之类的formate string),并且没有主动设置NSDateFormatter
的locale
属性,NSDateFormatter
生成的格式化日期字符串跟以往的系统的不一样。
以下是stringFromDate方法的行为差异情况:
-
在
iOS15.4
系统的运行表现
-
在
iOS15.4以下
系统的运行表现
从以上两张图中可以发现,iOS15.4
的运行结果是2022-03-15 2:34 PM
,而iOS15.4以下系统
的运行结果是2022-03-15 14:56
-
解决方案
根据苹果官方文档,早在iOS10
就建议开发在使用DateFormatter
的时候需要指定locale
属性。也就是说使用fixed formate
的时候不指定locale
的话,是有输出内容不符合预期的隐患的。
不管这是苹果给不按照规范开发的开发者挖了一个大坑。。还是系统的一个bug
大家都引以为鉴吧。