iOS Obtenir le type de cycle horaire (12 heures ou 24 heures)


Exemple

Vérifier si la date actuelle contient le symbole pour AM ou PM

Objectif c

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);

Demander le type de cycle temporel à partir de NSDateFormatter

Objectif c

NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
BOOL is24h = containsA.location == NSNotFound;

Cela utilise une chaîne de modèle de date spéciale appelée "j" qui, selon les spécifications ICU ...

[...] demande le format d'heure préféré pour les paramètres régionaux (h, H, K ou k), déterminé par l'attribut préféré de l'élément hours dans les données supplémentaires. [...] Notez que l'utilisation de 'j' dans un squelette transmis à une API est la seule façon de demander à un squelette le type de cycle temporel préféré de l'environnement local (12 heures ou 24 heures).

Cette dernière phrase est importante. Il "est le seul moyen de demander à un squelette le type de cycle temporel préféré de l'environnement local". Puisque NSDateFormatter et NSCalendar sont construits sur la bibliothèque ICU, la même chose est vraie ici.

Référence

La deuxième option est dérivée de cette réponse .