web-dev-qa-db-ja.com

文字列としての月の名前

月の名前を文字列として返します。たとえば、「5月」、「9月」、「11月」などです。

私は試した:

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

ただし、これは整数(それぞれ5、9、11)を返します。月の名前を取得するにはどうすればよいですか?

76
Gaby

getDisplayName を使用します。

以前のAPIではString.format(Locale.US,"%tB",c);を使用します

83
trutheality

これを使って :

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());
146
John

文字列変数で月を取得するには、以下のコードを使用します

たとえば、9月。

M-> 9

MM-> 09

MMM-> 9月

MMMM-> 9月

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

「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 );

すべての翻訳の由来に興味がある場合- 参照はこちら グレゴリオ暦の翻訳(ページ上部にリンクされている他のカレンダー)。

37
artkoenig

これと同じくらい簡単

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

私はこの答えを他の場合に役立つように保管しますが、@ truthealityの答えは最も単純で直接的な方法のようです。

DateFormatSymbols を使用できます

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

ウクライナ語、ロシア語、チェコ語などの言語のスタナロン月名を適切にフォーマットするための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の出力はМайですが、Маяではありません

5
Dmytro

月の名前は言語によって異なるため、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

2
Ayaz Alifov

この形式で日付と時刻を取得するサンプル方法「2018 Nov 01 16:18:22」はこれを使用します

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

スタンドアロンの月名を取得することは、Javaで「正しく」実行することは驚くほど困難です。 (少なくともこの記事の執筆時点では、現在Java 8を使用しています)。

問題は、ロシア語やチェコ語を含む一部の言語では、月の名前のスタンドアロンバージョンが「フォーマット」バージョンと異なることです。また、単一のJava AP​​Iが単に「最適な」文字列を提供することはないようです。ここに投稿された回答の大部分は、書式設定バージョンのみを提供しています。以下に貼り付けるのは、単一の月名のスタンドアロンバージョンを取得するか、それらすべてを含む配列を取得するための実用的なソリューションです。

これにより、誰か他の人の時間を節約できることを願っています!

/**
 * 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