Javaで先月とその年を調べる方法
例えば今日が2012年10月10日の場合、結果は月= 9および年= 2012である必要があります。今日が2013年1月10日の場合、結果は月= 12および年= 2012である必要があります
Java 8:に組み込まれたJava.time
フレームワークの使用:
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
Joda Time Library を使用します。日付、時刻、カレンダー、ロケールを扱うのは非常に簡単で、バージョン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);
rollメソッドはブール値を取ります。これは、基本的に月をロールアップ(true)またはダウン(false)することを意味しますか?
private static String getPreviousMonthDate(Date date){
final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.DAY_OF_MONTH, 1);
cal.add(Calendar.DATE, -1);
Date preMonthDate = cal.getTime();
return format.format(preMonthDate);
}
private static String getPreToPreMonthDate(Date date){
final SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.add(Calendar.MONTH, -1);
cal.set(Calendar.DAY_OF_MONTH,1);
cal.add(Calendar.DATE, -1);
Date preToPreMonthDate = cal.getTime();
return format.format(preToPreMonthDate);
}
月はゼロベースであるため、getMonthを実行する際に1を追加する必要があることに注意する必要があります。以下の例では、Januarayに0ではなく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);