问题很简单。我试图弄清楚如何判断当前设备的时间格式。我假设它很简单,例如语言 - > Local.current.languageCode。当我搜索时,我不断获得转化结果。
您可以通过传递
"j"
和 .current
语言环境的模板创建日期格式。如果结果格式包含字母 "a"
表示该特定区域设置的日期格式设置为 12 小时:
extension Locale {
var is24Hour: Bool {
DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: self)?.contains("a") == false
}
}
游乐场测试:
if Locale.current.is24Hour {
print("Current setting is 24h")
} else {
print("Current setting is 12h")
}
let dateFormatter = DateFormatter()
dateFormatter.timeStyle = .short
print(dateFormatter.string(from: Date()))
这将打印:
当前设置为 12 小时
晚上 10:09
虽然您询问时该功能不可用,但从 iOS 16 和 macOS 13 开始,您还可以查看当前 Locale 的
hourCycle
值:
if Locale.current.hourCycle == .oneToTwelve
|| Locale.current.hourCycle == .zeroToEleven {
...
}
注意,不是 2 种,而是 4 种不同的可能性(0-11、1-12、0-23、1-24)。 0 与 1 的区别在午夜和凌晨 1 点之间以及中午和下午 1 点之间非常重要。例如,午夜后一分钟可以用四种写法:0:01、0:01am、12:01am 和 24:01。请参阅 Apple 文档,或
HourCycle
的 Unicode 通用区域设置数据存储库定义,网址为 https://www.unicode.org/reports/tr35/#UnicodeHourCycleIdentifier 。
并且,尽管该值来自区域设置,但它确实反映了用户可能设置的任何 12/24 小时时间首选项。 (至少当你查询时是这样的
Locale.current
)