如何从设备快速获取 12 小时与 24 小时的时间模式

问题描述 投票:0回答:2

问题很简单。我试图弄清楚如何判断当前设备的时间格式。我假设它很简单,例如语言 - > Local.current.languageCode。当我搜索时,我不断获得转化结果。

swift xcode swift5
2个回答
3
投票

您可以通过传递

"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


0
投票

虽然您询问时该功能不可用,但从 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

© www.soinside.com 2019 - 2024. All rights reserved.