使用基金会的DateFormatter
为“ de”语言环境从模板生成日期格式时,如下所示:
let locale: Locale = Locale(identifier: "de")
let format = DateFormatter.dateFormat(fromTemplate: "dMMMyGhhmmss",
options: 0,
locale: locale)
我总是得到以下格式:
d. MMM y G, h:mm:ss a
呈现
17. Nov. 2018 n. Chr., 8:30:20 PM
“ PM”部分对于区域设置“ de”是不常见的,但据我了解,此方法还考虑了用户的偏好。正确吗?
我使用了系统偏好设置中的设置,例如切换到24小时制,但我所做的任何更改都没有任何效果。我是否必须重新启动某些操作才能使更改生效?
有人可以向我解释发生了什么事吗?
答案 0 :(得分:1)
如果您在模板中使用h
或H
,则格式将包含指定的小时格式(12小时或24小时),而与区域设置无关。请改用j
。该符号要求语言环境的首选小时格式。
例如,给定模板dMMMyGjjmmss
,我得到:
MMM d, y G, h:mm:ss a
(12小时格式)的语言环境“ en” d. MMM y G, HH:mm:ss
(24小时格式)的语言环境“ de” 格式字符串使用Unicode技术标准#35中的格式模式。
Unicode Technical Standard #35的意思是关于符号j
:
这是一个特殊用途的符号。它一定不能出现在图案数据或骨架数据中。相反,它保留供传递给API的框架使用,以进行灵活的日期模式生成。在这种情况下,它会根据语言环境的标准短时间格式是否使用h,H,K或k来确定语言环境(h,H,K或k)的首选小时格式。在此类API的实现中,在开始与availableFormats数据进行匹配之前,必须用h,H,K或k替换'j'。请注意,在传递给API的框架中使用'j'是使框架请求语言环境的首选时间周期类型(12小时或24小时)的唯一方法。