gpt4 book ai didi

swift - NSDateFormatter 在 OS X 和 iOS 中检测 24 小时制

转载 作者:IT王子 更新时间:2023-10-29 05:39:15 25 4
gpt4 key购买 nike

我想检查用户在 OS X 和 iOS 中是否选择了 12 小时制或 24 小时制作为他们的偏好。所以我想检测用户是否做了以下事情:

  • 在 Mac 上,系统偏好设置为日期和时间,使用 24 小时制
  • 在 iPhone 上,首选项位于“设置”、“常规”、“日期和时间”、“24 小时制”中

我目前有以下代码,但它始终返回 12 小时制表示的时间,即使用户设置的系统首选项是 24 小时制。

let timeFormatter = NSDateFormatter()
timeFormatter.locale = NSLocale.currentLocale()
timeFormatter.dateStyle = NSDateFormatterStyle.NoStyle
timeFormatter.timeStyle = NSDateFormatterStyle.ShortStyle

let ampmtext = timeFormatter.stringFromDate(NSDate())
println(ampmtext)

if ampmtext.rangeOfString("M") != nil {
println("12-hour clock")
} else {
println("24-hour clock")
}

我想找到一个用 Objective-C 和 Swift 编写的适用于 Mac 和 iPhone 的解决方案,可以检测设备时钟显示的是 24 小时制还是 12 小时制。

最佳答案

日期模板函数有一个巧妙的技巧。有一个模板说明符 j,它将根据语言环境使用 12 小时制还是 24 小时制转换为小时格式。它将变成类似 h a 的 12 小时格式(在本例中为 en_US)或 HH 为 24 小时格式(en_GB)。

然后你只需要检查日期格式是否包含a

//let locale = NSLocale(localeIdentifier: "de_DE")
//let locale = NSLocale(localeIdentifier: "en_US")
//let locale = NSLocale(localeIdentifier: "en_GB")
let locale = NSLocale.currentLocale()

let dateFormat = NSDateFormatter.dateFormatFromTemplate("j", options: 0, locale: locale)!

if dateFormat.rangeOfString("a") != nil {
println("12 hour")
}
else {
println("24 hour")
}

这也应该考虑格式覆盖。

这类似于您的检查,但您不应尝试检查 AMPM。这些是英文版本,还有很多。例如在德国,如果您强制使用 12 小时格式,iOS 将使用 nachm.vorm.。正确的方法是检查a 的格式。

关于swift - NSDateFormatter 在 OS X 和 iOS 中检测 24 小时制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28162729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com