26

I am building an alarm clock app in Swift 2. I can't seem to find a decent way to find out whether the phone is set to 24 hours time or not. In addition I can't change the simulator to work with 24 hours so I can't even test some alternatives by playing with the time settings. Any ideas?

Nicola Giancecchi
  • 3,045
  • 2
  • 25
  • 41
Ran
  • 277
  • 4
  • 8

1 Answers1

53
  • There is a template specifier for NSDateFormatter that fits this need. This specifier is j and you can get it through the dateFormatFromTemplate:options:locale: method of NSDateFormatter. The formatter returns h a if the locale is set to 12H, else HH if it's set to 24H, so you can easily check if the output string contains a or not. This relies on the locale property of the formatter that you should set to NSLocale.currentLocale() for getting the system's current locale:

Swift 3

    let locale = NSLocale.current
    let formatter : String = DateFormatter.dateFormat(fromTemplate: "j", options:0, locale:locale)!
    if formatter.contains("a") {
        //phone is set to 12 hours
    } else {
        //phone is set to 24 hours
    }

Swift 2

    let locale = NSLocale.currentLocale()
    let formatter : String = NSDateFormatter.dateFormatFromTemplate("j", options:0, locale:locale)!
    if formatter.containsString("a") {
        //phone is set to 12 hours
    } else {
        //phone is set to 24 hours
    }

Reference: NSDateFormatter Class Reference - Unicode ts35-23 Date Field Symbol Table

  • In the simulator, you don't have the 12/24 hours toggle in the settings like it happens on the real devices. A trick for changing this is by editing the date style of the Simulator, without affecting the currently selected region or calendar. You can find this option in Settings > General > Language and Region > Advanced.
Nicola Giancecchi
  • 3,045
  • 2
  • 25
  • 41