12
votes

Utilisation de NsdateFormatter sur l'iPhone, protéger les paramètres régionaux mais perdre des composants de la date

C'est une question légèrement délicate. J'utilise NsdateFormatter sur l'iPhone, mais je voulais seulement montrer une date standard sans composante des années. Mais conserver le formatage des paramètres régionaux des utilisateurs pour leur date.

Je pourrais facilement remplacer le formatage en utilisant P>

[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"];  // hurl.ws/43p9 (date formatting)


0 commentaires

3 Réponses :


11
votes

Vous pouvez essayer quelque chose comme: xxx

type de hack, mais cela devrait fonctionner.

Edit: Vous pouvez supprimer des occurrences des chaînes @ "y," et @ "y" d'abord, au cas où vous vous retrouverez avec des espaces supplémentaires funky ou des virgules.


4 commentaires

J'espère que cela ne vous dérange pas, mais j'ai pris la liberté d'ajouter la ligne pour définir un style de date en premier - si vous ne définissez pas le style de date datformat ne renvoie rien (ni format de la date à une chaîne pour vous sans avoir non plus de dent. ou dateformat Set). J'étais sur le point de poster la même réponse, mais vous me battez en quelques secondes!


Réponse géniale. Je n'ai jamais pensé à le faire de cette façon. Merci pour votre réponse qui est plutôt agréable si vous me demandez.


Cela ne fonctionnera pas si bien pour les langues asiatiques par l'apparence de celui-ci.


Essayez la réponse de Jeffery / Amir à la place.



10
votes

Le problème avec la réponse ci-dessus est que @ "y," et @ "y" sont à la fois dépendants de la localisation. Je viens de jouer avec la fixation du format de date et d'heure sur mon ordinateur au japonais, coréen et à un certain nombre d'autres formats. Vous constaterez que parfois l'année est représentée par un symbole dans la langue locale, ou parfois une période est utilisée, ou un certain nombre d'autres possibilités. Donc, vous auriez besoin de rechercher et de remplacer toutes ces possibilités, si vous espérez maintenir une dépendance de localisation correcte.

Il y a une méthode de classe + DateFormatFromTemplate: Options: Locale: Ce qui peut aider, bien qu'il ne prenne pas la date ou le style de temps et il n'est donc pas aussi flexible.

Je ne suis pas sûr qu'il y ait une bonne solution avec des API supplémentaires d'Apple. Mais même alors, il n'est pas clair qu'ils ont leurs propres localisations séparées dans des composants. Sans que cela soit essentiellement une tâche impossible.


2 commentaires

Permettez-moi de me corriger, la méthode de la classe + DateFormatFromtemplate: Options: Locale: semble assez intelligent pour fixer la mise en forme de la chaîne de date. Par exemple, si je lui donne le modèle @ "d-mmmm" il renvoie mmmm d pour la localisation des États-Unis et m 月 d ol pour japonais . Donc, il est donc clair que vous pouvez supprimer les composants dans une localisation fixe, puis la convertir sur la locale actuelle.


Cela a travaillé à merveille pour moi et semble moins hacable que l'autre réponse. Vous pouvez être flexible avec le passage (par exemple) "mmmm" ou "mm" dans le modèle, donc je ne pense pas avoir besoin de styles.



16
votes

de iOS 4.0 La bonne façon de le faire (voir la session de localisation de la WWDC 2012), en prenant en charge différentes variations de paramètres régionaux hors de la boîte, utilise l'API suivante comme mentionné ci-dessus

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];  
NSString *longFormatWithoutYear = [NSDateFormatter dateFormatFromTemplate:@"MMMM d" options:0 locale:[NSLocale currentLocale]]; 
[dateFormatter setDateFormat:longFormatWithoutYear];
//format your date... 
//output will change according to locale. E.g. "July 9" in US or "9 de julho" in Portuguese


1 commentaires

Ceci (et Jeffery's) est la bonne réponse. Merci pour l'exemple!