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?
Utilisez getDisplayName .
Pour les API antérieures, utilisez String.format(Locale.US,"%tB",c);
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());
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())
"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).
Aussi simple que cela
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
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
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 Мая
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
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;
}
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);