web-dev-qa-db-fra.com

Nom du mois sous forme de chaîne

J'essaie de renvoyer le nom du mois sous forme de chaîne, par exemple "mai", "septembre", "novembre".

J'ai essayé:

int month = c.get(Calendar.MONTH);

Cependant, cela retourne des entiers (5, 9, 11, respectivement). Comment puis-je obtenir le nom du mois?

70
Gaby

Utilisez getDisplayName .

Pour les API antérieures, utilisez String.format(Locale.US,"%tB",c);

82
trutheality

Utilisez ceci :

Calendar cal=Calendar.getInstance();
SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
String month_name = month_date.format(cal.getTime());

Le nom du mois contiendra le nom complet du mois , si vous voulez utiliser le nom du mois abrégé

 SimpleDateFormat month_date = new SimpleDateFormat("MMM");
 String month_name = month_date.format(cal.getTime());
140
John

Pour obtenir le mois en variable chaîne, utilisez le code ci-dessous

Par exemple le mois de septembre:

M -> 9

MM -> 09

MMM -> Sep

MMMM -> septembre 

String monthname=(String)Android.text.format.DateFormat.format("MMMM", new Date())
87
Arun Antoney

"MMMM" n'est certainement PAS la bonne solution (même si cela fonctionne pour de nombreuses langues), utilisez le modèle "LLLL" avec SimpleDateFormat

La prise en charge de «L» en tant qu'extension compatible avec l'ICU pour les noms de mois autonomes a été ajoutée à la plateforme Android le juin 2010 .

Même si en anglais il n'y a pas de différence entre l'encodage par 'MMMM' et 'LLLL', vous devriez aussi penser à d'autres langues. 

Par exemple. Voici ce que vous obtenez si vous utilisez Calendar.getDisplayName ou le modèle "MMMM" de janvier avec le russe Locale:

января (ce qui est correct pour une chaîne de date complète: "10 novembre, 2014")

mais dans le cas d'un nom de mois autonome, vous pouvez vous attendre:

январь

La bonne solution est:

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

Si vous êtes intéressé par l’origine de toutes les traductions - voici la référence aux traductions du calendrier grégorien (les autres calendriers sont liés en haut de la page).

34
artkoenig

Aussi simple que cela

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

Je garde cette réponse qui est utile dans d’autres cas, mais la réponse @trutheality semble être le moyen le plus simple et le plus direct.

Vous pouvez utiliser DateFormatSymbols

DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
9
MByD

Le seul moyen sur Android d’obtenir un nom de mois stanalone correctement formaté pour des langues telles que l’ukrainien, le russe, le tchèque

private String getMonthName(Calendar calendar, boolean short) {
    int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_MONTH_DAY | DateUtils.FORMAT_NO_YEAR;
    if (short) {
        flags |= DateUtils.FORMAT_ABBREV_MONTH;
    }
    return DateUtils.formatDateTime(getContext(), calendar.getTimeInMillis(), flags);
}

Testé sur API 15-25

Sortie pour mai est Май mais pas Мая

3
Dmytro

Je recommanderais d'utiliser Calendar object et Locale car les noms de mois sont différents pour différentes langues:

// index can be 0 - 11
private String getMonthName(final int index, final Locale locale, final boolean shortName)
{
    String format = "%tB";

    if (shortName)
        format = "%tb";

    Calendar calendar = Calendar.getInstance(locale);
    calendar.set(Calendar.MONTH, index);
    calendar.set(Calendar.DAY_OF_MONTH, 1);

    return String.format(locale, format, calendar);
}

Exemple de nom de mois complet:

System.out.println(getMonthName(0, Locale.US, false));

Résultat: January

Exemple pour le nom du mois court:

System.out.println(getMonthName(0, Locale.US, true));

Résultat: Jan

2
Sa Qada

Obtenir un nom de mois autonome est étonnamment difficile à exécuter "correctement" en Java. (Au moins au moment d'écrire ces lignes. J'utilise actuellement Java 8). 

Le problème est que dans certaines langues, y compris le russe et le tchèque, la version autonome du nom du mois est différente de la version "formatage". En outre, il apparaît qu'aucune API Java ne vous donnera simplement la "meilleure" chaîne. La majorité des réponses publiées ici n’offrent que la version de formatage. Vous trouverez ci-dessous une solution efficace pour obtenir la version autonome d'un nom de mois unique ou pour obtenir un tableau avec chacun d'eux.

J'espère que cela sauve du temps à quelqu'un d'autre!

/**
 * getStandaloneMonthName, This returns a standalone month name for the specified month, in the
 * specified locale. In some languages, including Russian and Czech, the standalone version of
 * the month name is different from the version of the month name you would use as part of a
 * full date. (Different from the formatting version).
 *
 * This tries to get the standalone version first. If no mapping is found for a standalone
 * version (Presumably because the supplied language has no standalone version), then this will
 * return the formatting version of the month name.
 */
private static String getStandaloneMonthName(Month month, Locale locale, boolean capitalize) {
    // Attempt to get the standalone version of the month name.
    String monthName = month.getDisplayName(TextStyle.FULL_STANDALONE, locale);
    String monthNumber = "" + month.getValue();
    // If no mapping was found, then get the formatting version of the month name.
    if (monthName.equals(monthNumber)) {
        DateFormatSymbols dateSymbols = DateFormatSymbols.getInstance(locale);
        monthName = dateSymbols.getMonths()[month.getValue()];
    }
    // If needed, capitalize the month name.
    if ((capitalize) && (monthName != null) && (monthName.length() > 0)) {
        monthName = monthName.substring(0, 1).toUpperCase(locale) + monthName.substring(1);
    }
    return monthName;
}

/**
 * getStandaloneMonthNames, This returns an array with the standalone version of the full month
 * names.
 */
private static String[] getStandaloneMonthNames(Locale locale, boolean capitalize) {
    Month[] monthEnums = Month.values();
    ArrayList<String> monthNamesArrayList = new ArrayList<>();
    for (Month monthEnum : monthEnums) {
        monthNamesArrayList.add(getStandaloneMonthName(monthEnum, locale, capitalize));
    }
    // Convert the arraylist to a string array, and return the array.
    String[] monthNames = monthNamesArrayList.toArray(new String[]{});
    return monthNames;
}
0
BlakeTNC

Un exemple de moyen d’obtenir la date et l’heure en Ce format "2018 nov 01 16:18:22" utilise ceci

DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
        Date date = new Date();
         dateFormat.format(date);
0
justchill