40 votes

Détecter si le format de l'heure est au format 12h ou 24h

Y a-t-il un moyen de détecter si l'appareil actuel de l'application utilise 12h notre format 24h, de sorte que je puisse utiliser un NSDateFormatter pour 12h et un pour 24h en fonction de la langue des utilisateurs/paramètre de loaction ? Tout comme UIDatePicker détecte et affiche le sélecteur AM/PM s'il est au format 12h.

83voto

JonasG Points 3081

J'ai compris, c'est assez facile. Je viens d'ajouter ce code à viewDidLoad :

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);
[formatter release];
NSLog(@"%@\n",(is24h ? @"YES" : @"NO"));

Et il renvoie parfaitement YES ou NO selon les lieux.

13voto

Et voici une version mise à jour de Swift 3.0

func using12hClockFormat() -> Bool {

    let formatter = DateFormatter()
    formatter.locale = Locale.current
    formatter.dateStyle = .none
    formatter.timeStyle = .short

    let dateString = formatter.string(from: Date())
    let amRange = dateString.range(of: formatter.amSymbol)
    let pmRange = dateString.range(of: formatter.pmSymbol)

    return !(pmRange == nil && amRange == nil)
}

8voto

beowulf Points 115

c'est la solution SWIFT qui a fonctionné pour moi, les deux ci-dessus ne l'ont pas fait.

let dateString: String = DateFormatter.dateFormat(
    fromTemplate: "j", options: 0,
    locale: Locale.current
)!
if(dateString.contains("a")){
// 12 h format
   return true
}else{
// 24 h format
   return false
}

2voto

Wiingaard Points 1247

Voici la version Swift :

func using12hClockFormat() -> Bool {

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

    let dateString = formatter.stringFromDate(NSDate())
    let amRange = dateString.rangeOfString(formatter.AMSymbol)
    let pmRange = dateString.rangeOfString(formatter.PMSymbol)

    return !(pmRange == nil && amRange == nil)
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X