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 renvoie des entiers (5, 9, 11, respectivement). Comment puis-je obtenir le nom du mois?
java.util.Calendar
et pas une autreCalendar
classe, non?Formatter f = new Formatter();
(vous pouvez éventuellement lui donner une locale) alorsString monthName = f.format("%tB",c).toString();
ou%tb
pour un nom court.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 un nom de mois court, utilisez ceci
SimpleDateFormat month_date = new SimpleDateFormat("MMM"); String month_name = month_date.format(cal.getTime());
la source
Pour obtenir le mois dans la variable de chaîne, utilisez le code ci-dessous
Par exemple le mois de septembre:
M -> 9
MM -> 09
MMM -> sept
MMMM -> Septembre
String monthname=(String)android.text.format.DateFormat.format("MMMM", new Date())
la source
"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 '' comme extension compatible ICU pour les noms de mois autonomes a été ajoutée à la plate-forme Android en juin 2010 .
Même si en anglais il n'y a pas de différence entre le codage par «MMMM» et «LLLL», vous devriez également penser à d'autres langues.
Par exemple, voici ce que vous obtenez, si vous utilisez
Calendar.getDisplayName
ou le modèle "MMMM" pour janvier avec le russeLocale
:января (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 bonne solution est:
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() ); dateFormat.format( date );
Si vous êtes intéressé par la provenance de toutes les traductions, voici la référence aux traductions de calendriers grégoriens (autres calendriers liés en haut de la page).
la source
Aussi simple que ça
mCalendar = Calendar.getInstance(); String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
Calendar.LONG est d'obtenir le nom complet du mois et Calendar.SHORT donne le nom en bref. Par exemple: Calendar.LONG renverra le calendrier de janvier, tandis que SHORT renverra Jan
la source
Je garde cette réponse qui est utile pour d'autres cas, mais la réponse @trutheality semble être le moyen le plus simple et direct.
Vous pouvez utiliser DateFormatSymbols
DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
la source
Le seul moyen sur Android d'obtenir le nom du 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 l'API 15-25
La sortie pour mai est Май mais pas Мая
la source
Russe.
Month .MAY .getDisplayName( TextStyle.FULL_STANDALONE , new Locale( "ru" , "RU" ) )
Anglais aux États-Unis.
Month .MAY .getDisplayName( TextStyle.FULL_STANDALONE , Locale.US )
Voir ce code exécuté en direct sur IdeOne.com .
ThreeTenABP et java.time
Voici la réponse moderne. Lorsque cette question a été posée en 2011,
Calendar
elleGregorianCalendar
était couramment utilisée pour les dates et heures même si elles étaient toujours mal conçues. Cela fait 8 ans maintenant, et ces classes sont dépassées depuis longtemps. En supposant que vous n'êtes pas encore au niveau de l'API 26, ma suggestion est d'utiliser la bibliothèque ThreeTenABP, qui contient un backport adapté Android de java.time, l'API moderne de date et d'heure Java. java.time est tellement plus agréable à utiliser.En fonction de vos besoins exacts et de votre situation, il existe deux options:
Month
et sagetDisplayName
méthode.DateTimeFormatter
.Utiliser le mois
La sortie de cet extrait de code est:
Dans quelques langues, cela fera une différence que vous utilisiez
TextStyle.FULL
ouTextStyle.FULL_STANDALONE
. Vous devrez voir, peut-être vérifier avec vos utilisateurs, lequel des deux correspond à votre contexte.Utilisez un DateTimeFormatter
Si vous avez un rendez-vous avec ou sans heure de la journée, je trouve un rendez-vous
DateTimeFormatter
plus pratique. Par exemple:DateTimeFormatter monthFormatter = DateTimeFormatter.ofPattern("MMMM", desiredLanguage); ZonedDateTime dateTime = ZonedDateTime.of(2019, 5, 31, 23, 49, 51, 0, ZoneId.of("America/Araguaina")); String monthName = dateTime.format(monthFormatter);
Je montre l'utilisation d'un
ZonedDateTime
, le remplacement le plus proche de l'ancienneCalendar
classe. Le code ci - dessus fonctionne pour unLocalDate
, unLocalDateTime
,MonthDay
,OffsetDateTime
etYearMonth
aussi.Que faire si vous avez une
Calendar
API héritée qui n'a pas encore été mise à niveau vers java.time? Convertissez en aZonedDateTime
et procédez comme ci-dessus:Calendar c = getCalendarFromLegacyApi(); ZonedDateTime dateTime = DateTimeUtils.toZonedDateTime(c);
Le reste est le même qu'avant.
Question: java.time ne nécessite-t-il pas le niveau d'API Android 26?
java.time fonctionne bien sur les appareils Android plus anciens et plus récents. Il nécessite juste au moins Java 6 .
org.threeten.bp
sous-packages.Liens
java.time
été décrit pour la première fois.java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).la source
Je recommanderais d'utiliser un
Calendar
objet etLocale
puisque 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 pour le nom complet du mois:
System.out.println(getMonthName(0, Locale.US, false));
Résultat:
January
Exemple de nom de mois court:
System.out.println(getMonthName(0, Locale.US, true));
Résultat:
Jan
la source
Un exemple de méthode pour obtenir la date et l'heure dans ce format "2018 Nov 01 16:18:22" utilisez ceci
DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss"); Date date = new Date(); dateFormat.format(date);
la source
Obtenir un nom de mois autonome est étonnamment difficile à exécuter «correctement» en Java. (Au moins au moment de la rédaction de cet article. 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". De plus, il semble qu'aucune API Java ne vous fournisse simplement la "meilleure" chaîne. La majorité des réponses publiées ici jusqu'à présent n'offrent que la version de mise en forme. Vous trouverez ci-dessous une solution de travail pour obtenir la version autonome d'un seul nom de mois ou pour obtenir un tableau avec tous.
J'espère que cela fera gagner 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; }
la source
Obtenez le nom du mois en String.
private String getMonthName() { Calendar cal = Calendar.getInstance(); SimpleDateFormat month_date = new SimpleDateFormat("MMMM"); String month_name = month_date.format(cal.getTime()); return month_name; }
Usage:
String monthName = getMonthName();
la source
SimpleDateFormat
classe et les amis longtemps démodés et notoirement gênants . Voyez si vous pouvez utiliser le désugarage ou ajouter ThreeTenABP à votre projet Android, afin d'utiliser java.time, l'API de date et d'heure Java moderne. C'est tellement plus agréable de travailler avec.