L'implémentation de DateFormatSymbols a été modifiée dans JDK 8, donc la méthode getMonths ne renvoie plus les valeurs correctes pour tous les paramètres
ahaaman
1
pourriez-vous donner une solution de contournement / de travail pour JDK8?
Dominik
quand obtiendriez-vous un mois comme numéro?
Mickey Perlstein
Mickey pour répondre à votre question, voici comment obtenir le mois comme int et l'utiliser - public static void main (String [] args) {int month; GregorianCalendar date = nouveau GregorianCalendar (); mois = date.get (Calendar.MONTH); System.out.println ("Le mois courant est" + (mois + 1) + "et le nom du mois est" + getMonthForInt (mois)); } String statique getMonthForInt (int num) {String month = "faux"; DateFormatSymbols dfs = new DateFormatSymbols (); String [] mois = dfs.getMonths (); if (num> = 0 && num <= 11) {month = mois [num]; } mois de retour; }
Ajay Kumar
193
vous pouvez y parvenir en utilisant SimpleDateFormat , qui est destiné à formater la date et l'heure.
Calendar cal =Calendar.getInstance();System.out.println(newSimpleDateFormat("MMM").format(cal.getTime()));
L'utilisation de l'abstraction du calendrier est à mon avis la solution la plus élégante. +1
sebastian
2
Faux! Le problème sera dans les langues avec des cas. Par exemple, dans les locales slaves, il renverra le mois dans le cas génitif, par exemple, pour octobre dans les paramètres régionaux ru-RU, vous recevrez à la октябряplace de Октябрьce que vous attendez probablement.
Nick Sikrier
41
Voici la solution que j'ai trouvée pour un projet de classe:
Ceci est utile pour moinew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani
c'est une solution faible, que diriez-vous de janvier, février etc. pas d'ajout à janvier février etc. cela ne couvrira pas toute la situation
Abeer zaroor
2
Eh bien, vous devriez ajouter 1 au mois. Les tableaux commencent à 0.
RoccoDev
c'est mauvais, vous réinventez java?
Mickey Perlstein
1
Cela fonctionne pour les utilisateurs anglophones. Et les autres?
Advait S
33
si vous avez une interface multilingue, vous pouvez utiliser getDisplayName pour afficher le nom du mois avec le contrôle de la langue d'affichage.
voici un exemple d'affichage du nom du mois en anglais, français, arabe et arabe dans un pays spécifique comme "Syrie":
Calendar c =Calendar.getInstance();System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,Locale.ENGLISH ));System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,Locale.FRANCE ));System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,newLocale("ar")));System.out.println(c.getDisplayName(Calendar.MONTH,Calendar.LONG,newLocale("ar","SY")));System.out.println(c.getTime().toString());
le résultat est:
January
janvier
ينايركانونالثانيSatJan1719:31:30 EET 2015
Est une réponse correcte pour les paramètres régionaux RU. Très étrange, ce SDK Android ne contient pas de spécification «LLLL».
Anfet
12
Joda-Time
Que diriez-vous d'utiliser Joda-Time . C'est une API de date-heure bien meilleure avec laquelle travailler (et Januarysignifie janvier ici. Ce n'est pas comme Calendar, qui utilise l' 0-basedindex pendant des mois).
DateTime date =DateTime.now();String month = date.toString("MMM");
Nom du mois du numéro
Si vous voulez un nom de mois pour un numéro de mois particulier, vous pouvez le faire comme ceci:
int month =3;String monthName =DateTime.now().withMonthOfYear(month).toString("MMM");
Localiser
L'approche ci-dessus utilise les paramètres régionaux par défaut actuels de votre JVM pour la langue du nom du mois. Vous souhaitez plutôt spécifier un objet Locale.
Veuillez noter que vous monthNumbercommencez à compter à partir de 1 alors que l'une des méthodes ci-dessus renvoie un tableau, vous devez donc commencer à compter à partir de 0.
ne Monthdémarre pas son index avec janvier = 1, alors que Calendar commence par janvier = 0? N'échouerait-il pas Month.of(calendar.get(Calendar.MONTH));dans le cas de janvier?
MCO le
2
Vous pouvez obtenir une ligne comme ceci:
String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
Nous avons une MonthAPI en Java ( java.time.Month). Nous pouvons obtenir en utilisantMonth.of(month);
Ici, les Monthsont indexés sous forme de nombres afin que vous puissiez fournir Month.JANUARYou fournir un index dans l'API ci-dessus, tel que 1, 2, 3, 4.
J'ai créé une extension kotlin basée sur les réponses de cette rubrique et en utilisant les réponses DateFormatSymbols, vous obtenez une réponse localisée.
fun Date.toCalendar():Calendar{
val calendar =Calendar.getInstance()
calendar.time =thisreturn calendar
}
fun Date.getMonthName():String{
val month = toCalendar()[Calendar.MONTH]
val dfs =DateFormatSymbols()
val months = dfs.months
return months[month]}
Bien que votre réponse soit correcte, elle est de mauvaise qualité. Veuillez expliquer pourquoi cette réponse est correcte.
SubliemeSiem
1
@SubliemeSiem J'essaie juste de changer le format et le moyen le plus simple de le faire: MM- il renverra le nom du mois en entier comme 01, 02, 03. MMM-il retournera le nom du mois en bref comme jan, feb, mar. MMMM-it retournera le nom complet du mois au format chaîne comme janvier.
Amit Mishra
c'est la seule bonne réponse pour le formatage des dates. utilisez un objet Date ou Calendrier et formatez-le avec un formateur. la question elle-même est mauvaise
Mickey Perlstein
0
Il renvoie le nom anglais du mois. 04 renvoie APRIL et ainsi de suite.
Suggestion simple et directe, merci. Votre code ne se compile pas. Vous devrez soit déclarer le type de retour, Monthsoit appliquer toStringle résultat avant de le renvoyer.
Ole VV
-3
à partir du document java SimpleDateFormat:
*<td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>*<td><code>02001.July.04 AD 12:08 PM</code>*<td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>*<td><code>Wed,4Jul200112:08:56-0700</code>
Réponses:
Vous obtiendrez également de cette façon.
la source
vous pouvez y parvenir en utilisant SimpleDateFormat , qui est destiné à formater la date et l'heure.
la source
Aussi simple que ça
la source
октября
place deОктябрь
ce que vous attendez probablement.Voici la solution que j'ai trouvée pour un projet de classe:
Le numéro que vous transmettez provient d'un
Calendar.MONTH
appel.la source
new SimpleDateFormat("MMMM").format(cal.getTime());
si vous avez une interface multilingue, vous pouvez utiliser getDisplayName pour afficher le nom du mois avec le contrôle de la langue d'affichage.
voici un exemple d'affichage du nom du mois en anglais, français, arabe et arabe dans un pays spécifique comme "Syrie":
le résultat est:
la source
Pour certaines langues (par exemple le russe), c'est la seule manière correcte d'obtenir les noms de mois autonomes.
Voici ce que vous obtenez, si vous utilisez à
getDisplayName
partir deCalendar
ouDateFormatSymbols
pour janvier:января (qui est correct pour une chaîne de date complète: " 10 января, 2014 ")
mais dans le cas d'un nom de mois autonome, vous attendez:
январь
la source
Joda-Time
Que diriez-vous d'utiliser Joda-Time . C'est une API de date-heure bien meilleure avec laquelle travailler (et
January
signifie janvier ici. Ce n'est pas comme Calendar, qui utilise l'0-based
index pendant des mois).Vous pouvez utiliser la
AbstractDateTime#toString( pattern )
méthode pour formater la date au format spécifié:Nom du mois du numéro
Si vous voulez un nom de mois pour un numéro de mois particulier, vous pouvez le faire comme ceci:
Localiser
L'approche ci-dessus utilise les paramètres régionaux par défaut actuels de votre JVM pour la langue du nom du mois. Vous souhaitez plutôt spécifier un objet Locale.
la source
SimpleDateFormat
etDate
Month::getDisplayName
Depuis Java 8, utilisez l'
Month
énumération. legetDisplayName
méthode localise automatiquement le nom du mois.Passer:
TextStyle
pour déterminer combien de temps ou comment abrégé.Locale
pour spécifier la langue humaine utilisée dans la traduction, et les normes culturelles utilisées pour l'abréviation, la ponctuation, etc.Exemple:
la source
C'est peut-être une vieille question, mais comme une seule ligne pour obtenir le nom du mois où nous connaissons les indices, j'ai utilisé
ou pour les noms courts
Veuillez noter que vous
monthNumber
commencez à compter à partir de 1 alors que l'une des méthodes ci-dessus renvoie un tableau, vous devez donc commencer à compter à partir de 0.la source
Ce code prend en charge la langue. Je les avais utilisés dans l'application Android.
la source
J'ai trouvé cela beaucoup plus facile ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )
la source
Month
démarre pas son index avec janvier = 1, alors que Calendar commence par janvier = 0? N'échouerait-il pasMonth.of(calendar.get(Calendar.MONTH));
dans le cas de janvier?Vous pouvez obtenir une ligne comme ceci:
String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]
la source
Cela fonctionne pour moi:
Pour revenir
"September"
avec une ligne:la source
Une manière:
Nous avons une
Month
API en Java (java.time.Month
). Nous pouvons obtenir en utilisantMonth.of(month);
Ici, les
Month
sont indexés sous forme de nombres afin que vous puissiez fournirMonth.JANUARY
ou fournir un index dans l'API ci-dessus, tel que 1, 2, 3, 4.Deuxième manière:
Ceci est disponible en
java.time.ZonedDateTime
.la source
J'ai créé une extension kotlin basée sur les réponses de cette rubrique et en utilisant les réponses DateFormatSymbols, vous obtenez une réponse localisée.
la source
Cela a fonctionné pour moi
la source
la source
Il renvoie le nom anglais du mois. 04 renvoie APRIL et ainsi de suite.
la source
Month
soit appliquertoString
le résultat avant de le renvoyer.à partir du document java SimpleDateFormat:
la source