首页 > 解决方案 > 函数 `DateFormatter.dateFormat(fromTemplate:)` 是如何工作的?

问题描述

通过一些挖掘和 SO 线程的帮助,我能够弄清楚,如果您使用如下代码设置 DateFormatter:

let locale = NSLocale.current
let format : String = DateFormatter.dateFormat(fromTemplate: "j:mm.ss.SSS", options:0, locale:locale)!
print("format = \(format)")
let formatter = DateFormatter()
formatter.dateFormat = format

您将获得一个日期格式化程序,其日期字符串适应用户的 12/24 小时时钟设置。

如果您在美国运行该代码并将设备设置为 12 小时时间,您会在控制台上看到以下内容:

format = h:mm:ss.SSS a

如果您将设备设置为 24 小时制,您会看到

format = HH:mm:ss.SSS

那讲得通。

但是,一旦将生成的格式字符串分配给日期格式化程序,它应该是固定的。我希望日期格式化程序生成 12 或 24 小时的时间,直到我明确更改它的格式字符串。

事实并非如此。如果我切换到设置并将时钟设置从 12 小时更改为 24 小时,日期格式化程序就会神奇地开始生成 24 小时时间字符串。我可以记录日期格式化程序的格式字符串,它仍然显示 12 小时字符串“h:mm:ss.SSS a”。这是怎么回事?

标签: iosdateformatter

解决方案


推荐阅读