Comment obtenir le nom du mois à partir du calendrier


Réponses:


99

Vous obtiendrez également de cette façon.

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }

6
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(new SimpleDateFormat("MMM").format(cal.getTime()));

Cela fonctionnera mais je voudrais obtenir la chaîne repr. du mois où j'en connais l'index. Je pense que je vais utiliser les autres approches, merci.
ogzd

47
cela m'a aidé à obtenir le nom du mois en cours. même si j'ai utilisé ("MMMM") pour obtenir le nom complet du mois au lieu d'un raccourci.
speedynomads

77

Aussi simple que ça

mCalendar = Calendar.getInstance();    
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());

4
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:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

Le numéro que vous transmettez provient d'un Calendar.MONTHappel.


2
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, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

le résultat est:

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015

De quelle version java s'agit-il?
Muhammad Gelbana

16
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );

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 à getDisplayNamepartir de Calendarou DateFormatSymbolspour 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:

январь


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).

Vous pouvez utiliser la AbstractDateTime#toString( pattern )méthode pour formater la date au format spécifié:

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.

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
merci mais je suis content de mon vieux SimpleDateFormatetDate
ogzd

@ogzd. Ton souhait. Mais vous devriez certainement essayer, et je parie que vous allez adorer le chanter.
Rohit Jain

@ogzd. J'ai posté le moyen d'obtenir le nom du mois à partir du numéro du mois. BTW, pourquoi voudriez-vous faire cela?
Rohit Jain

10

Month::getDisplayName

Depuis Java 8, utilisez l' Monthénumération. legetDisplayName méthode localise automatiquement le nom du mois.

Passer:

  • UNE TextStyle pour déterminer combien de temps ou comment abrégé.
  • A Localepour spécifier la langue humaine utilisée dans la traduction, et les normes culturelles utilisées pour l'abréviation, la ponctuation, etc.

Exemple:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

9

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é

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

ou pour les noms courts

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

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.


3

Ce code prend en charge la langue. Je les avais utilisés dans l'application Android.

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

1
Cela fonctionne parfaitement, les commentaires sont juste un peu complètement faux
Иво Недев

3

J'ai trouvé cela beaucoup plus facile ( https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html )

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}

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)]


2

Cela fonctionne pour moi:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

Pour revenir "September"avec une ligne:

String month = getMonthName(9);

2

Une manière:

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.

Deuxième manière:

ZonedDateTime.now().getMonth();

Ceci est disponible en java.time.ZonedDateTime.


1

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 = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}

1

Cela a fonctionné pour moi

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
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.

String englishMonth (int month){
        return Month.of(month);
    }

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, 4 Jul 2001 12:08:56 -0700</code>

Je ne vois pas comment cela répond à la question posée.
jhpg
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.