日期格式模板中语言环境的首选小时格式

时间:2018-11-17 19:49:01

标签: swift date foundation

使用基金会的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小时制,但我所做的任何更改都没有任何效果。我是否必须重新启动某些操作才能使更改生效?

有人可以向我解释发生了什么事吗?

1 个答案:

答案 0 :(得分:1)

如果您在模板中使用hH,则格式将包含指定的小时格式(12小时或24小时),而与区域设置无关。请改用j。该符号要求语言环境的首选小时格式。

例如,给定模板dMMMyGjjmmss,我得到:

  • MMM d, y G, h:mm:ss a(12小时格式)的语言环境“ en”
  • d. MMM y G, HH:mm:ss(24小时格式)的语言环境“ de”

Apple's documentation状态:

  

格式字符串使用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小时)的唯一方法。