2008-11-04 8 views
0

Je suis en train d'analyser les dates en utilisant comme États-Unis, il imprime les préférences de date de l'utilisateurNSDateFormatter n'analyse pas les dates en utilisant les paramètres régionaux?

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4]; 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateStyle:NSDateFormatterShortStyle]; 
NSDate *date = [ dateFormatter dateFromString:@"7/4/2008" ]; 
NSLog(@"string from date %@: %@ for locale %@", date, [dateFormatter stringFromDate:date], [[dateFormatter locale] localeIdentifier]); 

Quand je mets ma région (dans les préférences du système international):

2008-08-14 20:20:31.117 Date Difference17226:10b string from date 2008-07-04 00:00:00 -0400: 7/4/08 for locale en_US 

Et quand ma région est Royaume-Uni, il imprime:

2008-08-14 20:19:23.441 Date Difference17199:10b string from date 2008-04-07 00:00:00 -0400: 07/04/2008 for locale en_GB 

il semble que le NSDateFormatter est insensible au changement des régions. Notez que l'impression brute de la date change correctement avec la région, cependant.

Que dois-je faire pour que NSDateFormatter respecte le paramètre de région?

Répondre

0

Cela semble correct. Dans le premier exemple de sortie, la chaîne de date formatée est 7/4/200. Dans la seconde, c'est 07/04/2008.

Quelle différence attendiez-vous?

Si vous ne modifiez pas vos préférences de format pour le format de date préférée Royaume-Uni, je crois par défaut MM/JJ/AAAA par des zéros pendant des mois et des jours moins de 10.

3

Il ressemble le NSDateFormatter est insensible au changement de régions.

Non, il utilise les paramètres régionaux dans les deux directions.

Vous pouvez voir comment le formateur interprété la date en regardant la description de la date (le premier %@ dans votre format NSLog).
Avec la région comme US, le formateur a interprété la date comme 2008-07-04 (4 juillet).
Avec la région comme GB, le formateur a interprété la date comme 2008-04-07 (7 avril).

Ensuite, vous avez demandé au même formateur dans la même région d'afficher cette date.
Juillet 4 en utilisant le format américain est 07/04/2008 (MM/JJ/AAAA).
7 avril en utilisant le format GB est 07/04/2008 (JJ/MM/AAAA).

Questions connexes