2016-01-22 85 views
13

我正在Swift 2中構建一個鬧鐘應用程序。我似乎找不到一個體面的方法來確定手機是否設置爲24小時制。 此外,我無法將模擬器更改爲24小時工作,所以我甚至無法通過玩時間設置來測試某些替代方案。有任何想法嗎?我是否要檢查手機時間格式是否設置爲24小時?

回答

20
  • NSDateFormatter有一個模板說明符符合這個需要。該說明符是j,您可以通過NSDateFormatterdateFormatFromTemplate:options:locale:方法獲取。如果語言環境設置爲12H,格式化程序返回h a,否則HH如果設置爲24H,則可以輕鬆檢查輸出字符串是否包含a。這依賴於格式化的locale財產,你應該設置爲NSLocale.currentLocale()用於獲取系統的當前區域:

斯威夫特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 
    } 

斯威夫特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 
    } 

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

  • 在模擬器中,您沒有12/24小時切換設置,就像在真實設備上發生的那樣。 改變這個的一個技巧是編輯模擬器的日期樣式,而不影響當前選擇的區域或日曆。您可以在設置>常規>語言和地區>高級中找到該選項。
+1

24小時格式結果應該包含HH ...所以左右,模板「j」是非常有用的信息,至少對我而言。你能分享一些參考嗎? – user3441734

+0

@ user3441734你是對的,24小時格式的結果是「HH」,12小時是「h a」。我編輯了答案,並添加了對NSDateFormatter和相關Unicode標準的引用。 –

+0

感謝您的參考! – user3441734

相關問題