Comment puis-je convertir un nombre Entier en localisées nom du mois en Java?
- Je obtenir un nombre entier et j'ai besoin de convertir des noms de mois dans diverses localités:
Exemple pour la locale fr-fr:
1 -> janvier
2 -> février
Exemple pour les paramètres régionaux de l'es-mx:
1 -> Enero
2 -> Febrero
- Attention, Java mois sont basés sur zéro 0 = Jan, 1 = en Février, etc
- vous avez raison, donc, si un besoin de changer la langue, il faut juste modifier les paramètres régionaux. Merci
- mise à JOUR moderne
java.timeMonth
enum est basé sur: 1 à 12 pour janvier-décembre. Idem pour [java.time.DayOfWeek](https://docs.oracle.com/javase/9/docs/api/java/time/DayOfWeek.html): 1-7 for Monday-Sunday per ISO 8601 standard. Only the troublesome old legacy date-time classes such as
Calendrier de fou schémas de numérotation. L'une des nombreuses raisons pour éviter l'héritage des classes, aujourd'hui supplanté entièrement en java.les classes de temps.
Vous devez vous connecter pour publier un commentaire.
month-1
. Toute personne utilisantCalendar.get(Calendar.MONTH)
aurez juste besoinmonth
-1
DateFormatSymbols
fait partie de la terrible date-heure classes qui sont maintenant héritage, de l'adoption de la JSR 310. Aujourd'hui supplanté par le java.temps les classes.Vous devez utiliser LLLL pour les noms de mois. ceci est documenté dans le
SimpleDateFormat
de documents, tels que:IllegalArgumentException : Illegal pattern character 'L'
Je voudrais utiliser SimpleDateFormat. Quelqu'un me corrige si il ya un moyen plus facile de faire un monthed de calendrier même si, je le fais dans le code maintenant et je ne suis pas si sûr.
java.temps
Depuis Java 1.8 (ou 1.7 & 1.6 avec le ThreeTen-Backport) vous pouvez utiliser ceci:
Noter que
integerMonth
est de base 1, c'est à dire 1 est pour le mois de janvier. La gamme est toujours de 1 à 12 pour la période janvier-décembre (c'est à dire le calendrier Grégorien seulement).MonthDelocalizer
dans ma Réponse pour obtenir unMonth
objet d'un passé localisée mois nom de la chaîne:mai
→ Mois.MAI. Notez que la sensibilité à la casse des questions: En français,Mai
est pas valide et doit êtremai
.Voici comment je ferais. Je vais laisser le contrôle de la portée sur la
int month
jusqu'à vous.À L'Aide De SimpleDateFormat.
Résultat: Février
Apparemment dans Android 2.2 il y a un bug avec SimpleDateFormat.
Afin d'utiliser des noms de mois, vous devez définir vous-même dans vos ressources:
Et ensuite les utiliser dans votre code comme ceci:
tl;dr
java.time.Month
Beaucoup plus facile à faire maintenant, dans le java.les classes de temps qui permettent d'éviter ces pénibles ancien héritage de date-heure classes.
La
Mois
enum définit une douzaine d'objets, un pour chaque mois.Les mois sont numérotés de 1 à 12 pour janvier-décembre.
Demander à l'objet pour générer une Chaîne de la nom du mois, automatiquement localisé.
Ajuster la
TextStyle
pour spécifier comment long ou en abrégé que vous souhaitez que le nom. Notez que, dans certaines langues (l'anglais) le nom du mois varie lorsqu'il est utilisé seul ou en tant que partie d'une date complète. De sorte que chaque style de texte a un…_STANDALONE
variante.Spécifier un
Locale
à déterminer:Exemple:
Nom →
Month
objetPour info, en allant dans l'autre sens (de l'analyse d'un nom de chaîne de mois pour obtenir un
Month
enum objet) n'est pas intégré. Vous pouvez écrire votre propre classe pour le faire. Voici mon petit essai d'une telle classe. Utiliser à vos propres risques. J'ai donné ce code pas sérieux de la pensée, ni un sérieux test.Utilisation.
Code.
Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Vous pouvez échanger java.temps objets directement avec votre base de données. Utiliser un Pilote JDBC compatible avec JDBC 4.2 ou plus tard. Pas besoin de chaînes, pas besoin de
java.sql.*
classes.Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Il y a un problème lorsque vous utilisez DateFormatSymbols classe pour son getnomdumois méthode pour obtenir les Mois par le Nom de montrer les Mois par le Nombre dans certains appareils Android. J'ai résolu ce problème en procédant de cette façon:
Dans String_array.xml
Dans la classe Java suffit d'appeler ce tableau, par exemple de cette façon:
Heureux De Codage 🙂
SimpleDateFormat
classe, cependant.Juste de l'insertion de la ligne
fera l'affaire.
DateFormatSymbols
fait partie de la terrible date-heure classes qui sont maintenant héritage, de l'adoption de la JSR 310. Aujourd'hui supplanté par le java.temps les classes. Ce qui suggère leur utilisation en 2019 est de mauvais conseils.Essayez d'utiliser cette façon très simple et l'appeler comme votre propre func
Month::getDisplayName
.