2016-01-22 11 views

risposta

20
  • C'è uno specificatore di modello per NSDateFormatter che soddisfa questa esigenza. Questo identificatore è j e puoi farlo tramite il metodo dateFormatFromTemplate:options:locale: di NSDateFormatter. Il formattatore restituisce h a se la locale è impostata su 12H, altrimenti HH se è impostata su 24 ore, quindi è possibile verificare facilmente se la stringa di output contiene a oppure no. Questo si basa sulla locale proprietà del formattatore che è necessario impostare per NSLocale.currentLocale() per ottenere parametri locali del sistema:

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 
    } 

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

  • Nel simulatore, non si ha il cambio di 12/24 ore nelle impostazioni come avviene sui dispositivi reali. Un trucco per cambiare questo è modificando lo stile della data del simulatore, senza influenzare la regione o il calendario attualmente selezionato. Puoi trovare questa opzione in Impostazioni> Generali> Lingua e regione> Avanzate.
+1

per il formato di 24 ore il risultato dovrebbe contenere HH ... Quindi, il template "j" è un'informazione molto utile, almeno per me. Sei in grado di condividere qualche riferimento a questo? – user3441734

+0

@ user3441734 hai ragione, per il formato 24 ore il risultato è "HH" e per 12 ore è "h a". Ho modificato la risposta e aggiunto riferimenti a NSDateFormatter e allo standard Unicode associato. –

+0

grazie per il riferimento! – user3441734

Problemi correlati