2008-10-05 3 views
2

J'essaie de déterminer si l'utilisateur utilise 24 heures ou 12 heures, et il ne semble pas y avoir un bon moyen de comprendre cela à part la création d'un NSDateFormatter et la recherche de la chaîne de format pour le champ de la période (« a » caractère)Comment savoir si l'utilisateur utilise 24 heures de temps en utilisant Cocoa

Voici ce que je fais maintenant:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeStyle:NSDateFormatterShortStyle]; 
NSRange range = [[formatter dateFormat] rangeOfString:@"a"]; 
BOOL is24HourFormat = range.location == NSNotFound && range.length == 0; 
[formatter release]; 

ce qui fonctionne, mais se sent un peu fragile. Il doit y avoir un meilleur moyen, non?

+0

Ceci est définitivement fragile. Vous pouvez également vérifier la chaîne dateFormat pour les lettres qu'elle utilise pour l'heure. "H" ou "k" signifie qu'il est dans le temps de 24 heures (0 ou 1 basé, respectivement), tandis que "h" ou "K" signifie son en 12 heures (1 ou 0 basé). – matthias

Répondre

2

Cette information est fournie dans NSUserDefaults. Peut-être sous la clé NSShortTimeDateFormatString? (Encore besoin d'analyse bien sûr).

(utilisation

NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); 

pour vider toutes les valeurs par défaut des utilisateurs prédéfinis).

Je ne sais pas trop pourquoi vous voulez faire cela - je parie que vous avez une bonne raison - mais peut-être qu'il vaut mieux simplement utiliser les valeurs par défaut dans NSDateFormatter à la place?

0

NSShortTimeDateFormatString est obsolète, et je crois qu'il ne fonctionne pas non plus dans les versions 10.5 et ultérieures. Voir les notes de version de la fondation 10.4 et 10.5. Dumping toutes les valeurs par défaut est un bon moyen de dépendre de choses qui ne sont pas garanties par l'interface, mais il peut être intéressant de voir ce qui se passe sous le capot.

Pourquoi avez-vous besoin de cela? Comme le dit schwa, tout fonctionne beaucoup mieux si vous pouvez vous passer de tout savoir sur la présentation localisée.

Questions connexes