Javaの日付から月を取得する方法:
DateFormat inputDF = new SimpleDateFormat("mm/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
このコードは日と年を返しますが、月は返しません。
出力:
0 - 30 - 2011
これは、形式が正しくないためです:"MM/dd/yy"
の理由は、"mm"
は分です:
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
プリント8 - 30 - 2011
(月はゼロから始まるため デモ )
まず、日付形式でmm
を使用しました Javadocsによると「分」 。分ではなく、9
に設定しました。月のデフォルトは0(1月)のようです。
MM
(大文字の「M」)を使用して月を解析します。次に、8
が表示されます。これは Calendar
月では、1ではなく0で始まる であるためです。 1
を追加して、目的の9
を取得します。
グレゴリオ暦とユリウス暦の年の最初の月は、JANUARYであり、0です。
// MM is month, mm is minutes
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
以降
int month = cal.get(Calendar.MONTH) + 1; // To shift range from 0-11 to 1-12
SimpleDateFormat
javadoc を読むと、mm
は分単位であることがわかります。 1か月はMM
が必要です。
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
それ以外の場合、形式はmonth
フィールドを読み取らず、値を0
と見なします。
誰かが現代的な答えを提供する時間です。他の回答は、2013年に質問されたときの良い回答でしたが、まだ正しいです。今日、古くて時代遅れで悪名高い面倒なSimpleDateFormat
クラスと格闘する必要がある理由はありません。 Java.time
、最新のJava日付と時刻のAPIであり、次のように使用するとより優れています。
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("M/d/yy");
LocalDate date1 = LocalDate.parse("9/30/11", inputFormatter);
System.out.println(date1);
これはプリント
2011-09-30
LocalDate
クラスは、時刻なしの日付を表し、必要なものを正確に表します。古いクラスDate
およびCalendar
よりも正確に要件に一致します。
DateTimeFormatter
で使用されるフォーマットパターン文字列は、SimpleDateFormat
の文字列に似ていますが、いくつかの違いがあります。大文字のMM
を使用して2桁の月(9月の09など)を要求するか、単一のM
を使用して月を1桁または2桁で書き込むことができます。同様に、dd
またはd
は月の日です。 yy
は2桁の年を示し、2000を基数として解釈されます。つまり、2000から2099までを含みます(私の誕生日には機能しません)。
Link: Oracle tutorial Trail:Date Time 使用方法の説明Java.time
。
月の形式はMM
ではなくmm
にする必要があります
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
mm
isは分です。形式を指定するときはMM
を使用してください。
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);// returns month value index starts from 0
MM
の代わりにmm
を使用してこのようにしてみてください:-
DateFormat inputDF = new SimpleDateFormat("MM/dd/yy");
Date date1 = inputDF.parse("9/30/11");
Calendar cal = Calendar.getInstance();
cal.setTime(date1);
int month = cal.get(Calendar.MONTH);
int day = cal.get(Calendar.DAY_OF_MONTH);
int year = cal.get(Calendar.YEAR);
System.out.println(month+" - "+day+" - "+year);
インデックスが0から始まるため、印刷される月は8になります
またはで試してください:-
int month = cal.get(Calendar.MONTH) + 1;