如何可靠判断用户系统区域设置采用12/24小时时间格式?
判断系统区域的时间格式(12/24小时制)
关于你的两个疑问
- 你猜的没错,
Uhr是德语里的“点钟”,比如德语里表述19点会写19 Uhr,是24小时制时间的标准后缀。 - 你提到的
contains("a")方法确实存在误判风险:部分区域的时间格式字符串里可能包含字母"a",但并非AM/PM的标识,比如某些语言的时间格式里带有包含"a"的本地化词汇,会导致错误判定。
正确的判断方法
推荐两种可靠的实现方式:
方法一:利用DateFormatter的is12HourFormat属性
这是苹果官方提供的属性,直接返回当前locale下是否采用12小时制:
let formatter = DateFormatter() formatter.locale = Locale.current // 设置timeStyle触发formatter的本地化配置 formatter.timeStyle = .short let isUsing12HourFormat = formatter.is12HourFormat
方法二:基于模板字符串判断小时格式符号
利用j模板会根据locale自动选择小时格式的特性,判断生成的格式字符串里是12小时制的h(或hh),还是24小时制的H(或HH):
guard let formatString = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current) else { // 处理格式获取失败的场景,可根据需求设置默认值 fatalError("Failed to get date format from template") } // 包含h则为12小时制,包含H则为24小时制 let isUsing12HourFormat = formatString.contains("h")
这两种方法都能避开原方案的误判问题,更适配不同区域的本地化规则。
内容的提问来源于stack exchange,提问作者Cheok Yan Cheng
相关产品推荐
相关产品推荐

