Javaで先月とその年を知るにはどうすればよいですか?
たとえば、今日が2012年10月10日の場合、結果はとにMonth = 9
なりYear = 2012
ます。今日が2013年1月10日の場合、結果はとにMonth = 12
なりYear = 2012
ます。
java.time
Java 8 に組み込まれたフレームワークの使用:
import java.time.LocalDate;
LocalDate now = LocalDate.now(); // 2015-11-24
LocalDate earlier = now.minusMonths(1); // 2015-10-24
earlier.getMonth(); // java.time.Month = OCTOBER
earlier.getMonth.getValue(); // 10
earlier.getYear(); // 2015
JodaTimeLibraryを使用します。日付、時刻、カレンダー、ロケールの処理は非常に簡単で、バージョン8ではJavaに統合されます。
DateTime#minusMonths
メソッドは、前月を取得するのに役立ちます。
DateTime month = new DateTime().minusMonths (1);
これを行うには、Calendarクラスを使用できます。
SimpleDateFormat format = new SimpleDateFormat("yyyy.MM.dd HH:mm");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
System.out.println(format.format(cal.getTime()));
これは印刷します:2012.09.10 11:01
実際の日付2012.10.10 11:01
最も簡単でエラーが発生しにくいアプローチは... Calendar の roll() メソッドを使用します。このような:
c.roll(Calendar.MONTH, false);
ロール メソッドはブール値を取ります。これは基本的に、月をロールアップ (true) またはダウン (false) することを意味しますか?
月はゼロベースであることに注意する必要があるため、getMonthを実行するときは、1を追加する必要があります。以下の例では、0ではなく1としてJanuarayに1を追加する必要があります。
Calendar c = Calendar.getInstance();
c.set(2011, 2, 1);
c.add(Calendar.MONTH, -1);
int month = c.get(Calendar.MONTH) + 1;
assertEquals(1, month);