月の名前を文字列として返します。たとえば、「5月」、「9月」、「11月」などです。
私は試した:
int month = c.get(Calendar.MONTH);
ただし、これは整数(それぞれ5、9、11)を返します。月の名前を取得するにはどうすればよいですか?
getDisplayName を使用します。
以前のAPIではString.format(Locale.US,"%tB",c);
を使用します
これを使って :
Calendar cal=Calendar.getInstance();
SimpleDateFormat month_date = new SimpleDateFormat("MMMM");
String month_name = month_date.format(cal.getTime());
月名には完全な月名が含まれます。短い月名が必要な場合はこれを使用します
SimpleDateFormat month_date = new SimpleDateFormat("MMM");
String month_name = month_date.format(cal.getTime());
文字列変数で月を取得するには、以下のコードを使用します
たとえば、9月。
M-> 9
MM-> 09
MMM-> 9月
MMMM-> 9月
String monthname=(String)Android.text.format.DateFormat.format("MMMM", new Date())
「MMMM」は間違いなく正しいソリューションではありません(多くの言語で動作する場合でも)、SimpleDateFormat
で「LLLL」パターンを使用します
スタンドアロンの月名のICU互換拡張としての 'L'のサポートが 2010年6月 のAndroidプラットフォームに追加されました。
英語で「MMMM」と「LLLL」によるエンコーディングに違いがない場合でも、他の言語についても考慮する必要があります。
例えば。ロシアのLocale
で1月にCalendar.getDisplayName
または "MMMM"パターンを使用すると、これが得られます。
января(これは完全な日付文字列に対して正しい: "10января、2014 ")
しかし、スタンドアロンの月の名前の場合、あなたは期待するでしょう:
январь
適切なソリューションは次のとおりです。
SimpleDateFormat dateFormat = new SimpleDateFormat( "LLLL", Locale.getDefault() );
dateFormat.format( date );
すべての翻訳の由来に興味がある場合- 参照はこちら グレゴリオ暦の翻訳(ページ上部にリンクされている他のカレンダー)。
これと同じくらい簡単
mCalendar = Calendar.getInstance();
String month = mCalendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.getDefault());
私はこの答えを他の場合に役立つように保管しますが、@ truthealityの答えは最も単純で直接的な方法のようです。
DateFormatSymbols を使用できます
DateFormatSymbols(Locale.FRENCH).getMonths()[month]; // FRENCH as an example
ウクライナ語、ロシア語、チェコ語などの言語のスタナロン月名を適切にフォーマットするためのAndroidの唯一の方法
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);
}
API 15-25でテスト済み
Mayの出力はМайですが、Маяではありません
月の名前は言語によって異なるため、Calendar
オブジェクトとLocale
を使用することをお勧めします。
// 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);
}
完全な月名の例:
System.out.println(getMonthName(0, Locale.US, false));
結果:January
短い月名の例:
System.out.println(getMonthName(0, Locale.US, true));
結果:Jan
この形式で日付と時刻を取得するサンプル方法「2018 Nov 01 16:18:22」はこれを使用します
DateFormat dateFormat = new SimpleDateFormat("yyyy MMM dd HH:mm:ss");
Date date = new Date();
dateFormat.format(date);
スタンドアロンの月名を取得することは、Javaで「正しく」実行することは驚くほど困難です。 (少なくともこの記事の執筆時点では、現在Java 8を使用しています)。
問題は、ロシア語やチェコ語を含む一部の言語では、月の名前のスタンドアロンバージョンが「フォーマット」バージョンと異なることです。また、単一のJava APIが単に「最適な」文字列を提供することはないようです。ここに投稿された回答の大部分は、書式設定バージョンのみを提供しています。以下に貼り付けるのは、単一の月名のスタンドアロンバージョンを取得するか、それらすべてを含む配列を取得するための実用的なソリューションです。
これにより、誰か他の人の時間を節約できることを願っています!
/**
* 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;
}