首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDateFormatter检测OS和iOS中的24小时时钟

NSDateFormatter检测OS和iOS中的24小时时钟
EN

Stack Overflow用户
提问于 2015-01-27 03:26:18
回答 4查看 9.2K关注 0票数 21

我想检查用户是否选择了12小时或24小时时钟作为他们在OS和iOS中的首选。因此,我想检测用户是否做了以下操作:

  • 在Mac上,系统首选项在日期和时间上,使用24小时时钟。
  • 在iPhone上,首选项为设置、常规、日期和时间、24小时时间

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

代码语言:javascript
复制
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和Swift为Mac和iPhone编写的解决方案,它可以检测设备时钟是显示24小时还是12小时。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-28 01:32:33

日期模板函数有一个巧妙的技巧。有一个模板说明符j,它将根据区域设置是否使用12小时或24小时格式而转换为一小时格式。它将变成类似于h a 12小时(本例中为en_US)或HH为24小时格式(en_GB)。

然后,您只需检查日期格式是否包含a

代码语言:javascript
复制
//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的格式。

票数 39
EN

Stack Overflow用户

发布于 2018-03-22 21:17:45

Swift 4

以下是对已被接受的答案的快速4种解释:

代码语言:javascript
复制
func is24Hour() -> Bool {
    let dateFormat = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!

    return dateFormat.firstIndex(of: "a") == nil
}

用法:

代码语言:javascript
复制
if is24Hour() {
    // should show 24 hour time
} else {
    // should show 12 hour time
}
票数 20
EN

Stack Overflow用户

发布于 2021-11-08 08:42:22

使用此扩展程序

代码语言:javascript
复制
extension Locale {
    static var is24Hour: Bool {
        let dateFormat = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.current)!
        return dateFormat.firstIndex(of: "a") == nil
    }
}

免费在任何地方使用

代码语言:javascript
复制
if Locale.is24Hour {
    // Show 24 hour time
} else {
    // Show 12 hour time
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28162729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档