カレンダーから月の名前を取得する方法


回答:


99

あなたもこのようになります。

  String getMonthForInt(int num) {
        String month = "wrong";
        DateFormatSymbols dfs = new DateFormatSymbols();
        String[] months = dfs.getMonths();
        if (num >= 0 && num <= 11 ) {
            month = months[num];
        }
        return month;
    }

6
getMonths方法はもうすべてのロケールのための正しい値を返さないので、DateFormatSymbolsクラスの実装は、JDK 8に変更されました:oracle.com/technetwork/java/javase/...を
ahaaman

1
JDK8の回避策/実用的なソリューションを提供できますか?
ドミニク2014年

いつ月を数値として取得しますか?
ミッキーペルスタイン

ミッキーがあなたの質問に答えてください、これは月をintとして取得して使用する方法です-public static void main(String [] args){int month; GregorianCalendar date = new GregorianCalendar(); 月= date.get(Calendar.MONTH); System.out.println( "現在の月は" +(月+ 1)+ "であり、月の名前は" + getMonthForInt(month));です。} static String getMonthForInt(int num){String month = "wrong"; DateFormatSymbols dfs = new DateFormatSymbols(); String [] months = dfs.getMonths(); if(num> = 0 && num <= 11){month = months [num]; }返却月。}
Ajay Kumar

192

これは、日付と時刻をフォーマットするためのSimpleDateFormatを使用して実現できます。

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("MMM").format(cal.getTime()));

これは動作しますが、文字列reprを取得したいと思います。そのインデックスを知っている月の。おかげで、他のアプローチを使用すると思います。
ogzd 2013

47
これは、今月の名前を取得するのに役立ちました。( "MMMM")を使用して、短縮された月の名前の代わりに完全な月の名前を取得しましたが。
speedynomads 2013年

77

これと同じくらい簡単

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

4
カレンダーの抽象化の使用は、私の意見では最もエレガントなソリューションです。+1
セバスチャン2015

2
違う!問題はケース付きの言語にあります。たとえば、スラブロケ​​ールでは、属格の場合は月が返されます。たとえば、ru RUロケールの10月の場合は、おそらく予想されるのоктября代わりに受け取りますОктябрь
Nick Sikrier

41

これは私がクラスプロジェクトのために思いついた解決策です:

public static String theMonth(int month){
    String[] monthNames = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
    return monthNames[month];
}

渡した番号はCalendar.MONTH通話からのものです。


2
これは私にとって便利ですnew SimpleDateFormat("MMMM").format(cal.getTime());
Pratik Butani 2014年

これは弱い解決策です。1月2月などに加えて、jan、febなどはどうでしょう。これはすべての状況をカバーするわけではありません
Abeer zaroor

2
まあ、あなたは月に1を加える必要があります。配列は0から始まります
。– RoccoDev

これは悪いです、あなたはjavaを再発明していますか?
ミッキーペルスタイン2017年

1
これは英語を話すユーザー向けです。他はどうですか?
Advait S 2018

33

多言語インターフェースがある場合は、getDisplayNameを使用して、表示言語を制御して月の名前を表示できます。

「シリア」のような特定の国で月名を英語、フレンチ、アラビア語、アラビア語で表示する例を次に示します。

    Calendar c = Calendar.getInstance();
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.FRANCE ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar") ) );
    System.out.println(c.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar", "SY") ) );
    System.out.println(c.getTime().toString());

結果は次のとおりです。

  January
  janvier
  يناير
  كانون الثاني
  Sat Jan 17 19:31:30 EET 2015

これはどのJavaバージョンですか?
Muhammad Gelbana

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

一部の言語(ロシア語など)では、これがスタンドアロンの月名を取得する唯一の正しい方法です。

これは、1月getDisplayNameからCalendarまたはDateFormatSymbols1月に使用した場合に得られるものです。

января(完全な日付文字列として正しい: " 10января、2014 ")

ただし、スタンドアロンの月名の場合は、次のようになります。

январь


RUロケールの正解です。非常に奇妙なことですが、Android SDKには「LLLL」仕様が含まれていません。
-Anfet

12

ジョーダタイム

Joda-Timeの使い方はどうですか。これは、作業を行うのにはるかに優れた日時APIです(Januaryここでは1月を意味します。これは、0-based、月にインデックス)。

AbstractDateTime#toString( pattern )メソッドを使用して、指定した形式で日付をフォーマットできます。

DateTime date = DateTime.now();
String month = date.toString("MMM");

番号からの月名

特定の月番号の月名が必要な場合は、次のようにできます。

int month = 3;
String monthName = DateTime.now().withMonthOfYear(month).toString("MMM");

ローカライズ

上記のアプローチでは、月名の言語にJVMの現在のデフォルトのロケールを使用します。代わりにLocaleオブジェクトを指定します。

String month = date.toString( "MMM", Locale.CANADA_FRENCH );

1
おかげで私は私の古いと満足しているSimpleDateFormatDate
ogzd

@ogzd。あなたの願い。でも、ぜひ試してみてください。きっと歌うことができるでしょう。
Rohit Jain

@ogzd。月番号から月名を取得する方法を投稿しました。ところで、なぜあなたはそれをしたいのですか?
Rohit Jain

10

Month::getDisplayName

Java 8以降では、Month列挙型を使用してください。このgetDisplayNameメソッドは、月の名前を自動的にローカライズします。

パス:

  • TextStyleどのくらいの長さか、またはどのように省略されたかを決定するA。
  • Locale翻訳で使用される人間の言語、および略語、句読点などに使用される文化的規範を指定するA

例:

public static String getMonthStandaloneName(Month month) {
    return month.getDisplayName(
        TextStyle.FULL_STANDALONE, 
        Locale.getDefault()
    );
}

9

古い質問かもしれませんが、インデックスがわかっている月の名前を取得するためのワンライナーとして、私は

String month = new DateFormatSymbols().getMonths()[monthNumber - 1];

または略称

String month = new DateFormatSymbols().getShortMonths()[monthNumber - 1];

monthNumber上記のメソッドはいずれも配列を返すため、は1からカウントを開始するため、0からカウントを開始する必要があることに注意してください。


3

このコードは言語をサポートしています。私はそれらをAndroidアプリで使用していました。

String[] mons = new DateFormatSymbols().getShortMonths();//Jan,Feb,Mar,... 

String[] months = new DateFormatSymbols().getMonths();//January,Februaty,March,...

1
これはコメントがあり、完璧に動作ほんの少ししかし、完全に間違っている
ИвоНедев

3

私はこれがはるかに簡単であることがわかりました(https://docs.oracle.com/javase/tutorial/datetime/iso/enum.html

private void getCalendarMonth(Date date) {      
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    Month month = Month.of(calendar.get(Calendar.MONTH));       
    Locale locale = Locale.getDefault();
    System.out.println(month.getDisplayName(TextStyle.FULL, locale));
    System.out.println(month.getDisplayName(TextStyle.NARROW, locale));
    System.out.println(month.getDisplayName(TextStyle.SHORT, locale));
}

Month1月= 1でインデックスを開始しないのに対し、カレンダーは1月= 0で開始しますか?Month.of(calendar.get(Calendar.MONTH));1月の場合は失敗しませんか?
MCO

2

次のように1行で取得できます。 String monthName = new DataFormatSymbols.getMonths()[cal.get(Calendar.MONTH)]


2

これは私にとってはうまくいきます:

String getMonthName(int monthNumber) {
    String[] months = new DateFormatSymbols().getMonths();
    int n = monthNumber-1;
    return (n >= 0 && n <= 11) ? months[n] : "wrong number";
}

"September"1行で戻るには:

String month = getMonthName(9);

2

一方通行:

我々は持っているMonthJavaでAPIを(java.time.Month)。使うことで手に入るMonth.of(month);

ここでは、Month数値としてインデックスが付けられているためMonth.JANUARY、1、2、3、4など、上記のAPIで提供するか、インデックスを提供できます。

2番目の方法:

ZonedDateTime.now().getMonth();

これはで利用できますjava.time.ZonedDateTime


1

このトピックの応答に基づいてkotlin拡張機能を作成しました。DateFormatSymbolsの回答を使用すると、ローカライズされた応答が得られます。

fun Date.toCalendar(): Calendar {
    val calendar = Calendar.getInstance()
    calendar.time = this
    return calendar
}


fun Date.getMonthName(): String {
    val month = toCalendar()[Calendar.MONTH]
    val dfs = DateFormatSymbols()
    val months = dfs.months
    return months[month]
}

1

これは私のために働いた

        import java.text.SimpleDateFormat;
        import java.util.Calendar;


        Calendar cal = Calendar.getInstance();
        String currentdate=new SimpleDateFormat("dd-MMM").format(cal.getTime());

0
DateFormat date =  new SimpleDateFormat("dd/MMM/yyyy");
Date date1 = new Date();
System.out.println(date.format(date1));

1
あなたの答えは正しいかもしれませんが、それは質が悪いです。この答えが正しい理由を詳しく説明してください。
SubliemeSiem 2016年

1
@SubliemeSiem私はフォーマットを変更しようとしていますが、それを行うための最も簡単な方法です。MM-01、02、03のような整数で月名を返します。MMM-jan、feb、marのように月名を短く返します。MMMM-itは、1月のような文字列形式で完全な月の名前を返します。
Amit Mishra 2016年

これは日付をフォーマットするための唯一の正しい答えです。DateオブジェクトまたはCalendarオブジェクトを使用して、フォーマッターでフォーマットします。質問自体は悪いです
ミッキー・ペルスタイン

0

月の英語名を返します。04はAPRILを返します。

String englishMonth (int month){
        return Month.of(month);
    }

シンプルで直接的な提案、ありがとう。コードがコンパイルされません。結果を返す前に、戻り値の型を宣言するか、結果にMonth適用toStringする必要があります。
Ole VV

-3

SimpleDateFormat java docから:

*         <td><code>"yyyyy.MMMMM.dd GGG hh:mm aaa"</code>
 *         <td><code>02001.July.04 AD 12:08 PM</code>
 *         <td><code>"EEE, d MMM yyyy HH:mm:ss Z"</code>
 *         <td><code>Wed, 4 Jul 2001 12:08:56 -0700</code>

この質問にどのように答えるかはわかりません。
jhpg 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.