web-dev-qa-db-ja.com

javaを使用して現在の日付から1か月を削減し、日付変数に保存する方法は?

現在の日付から1か月を短縮し、このコードを使用してJava.util.Date変数imを痛めたいが、2行目にエラーが表示される

 Java.util.Date da = new Date();
 da.add(Calendar.MONTH, -1); //error

この日付をJava.util.Date変数に格納する方法は?

48
karthi

カレンダーを使用:

Calendar cal = Calendar.getInstance();
cal.add(Calendar.MONTH, -1);
Date result = cal.getTime();
89

Java 8、8から開始する方法は、Calendarではなく Date-Time API を使用することです。

Dateオブジェクトを返したい場合:

Date date = Date.from(ZonedDateTime.now().minusMonths(1).toInstant());

Dateオブジェクトを正確に必要としない場合は、パッケージによって提供されるクラスを直接使用して、他のタイムゾーンの日付を取得することもできます。

ZonedDateTime dateInUTC = ZonedDateTime.now(ZoneId.of("Pacific/Auckland")).minusMonths(1);
13
DVarga
Calendar calNow = Calendar.getInstance()

// adding -1 month
calNow.add(Calendar.MONTH, -1);

// fetching updated time
Date dateBeforeAMonth = calNow.getTime();
8
Jigar Joshi

Calendarを使用できます

    Java.util.Date da = new Date();
    Calendar cal = Calendar.getInstance();
    cal.setTime(da);
    cal.add(Calendar.MONTH, -1);
    da = cal.getTime();
5
Ahiel

JodaTime を使用:

Date date = new DateTime().minusMonths(1).toDate();

JodaTimeは、日付操作に便利なAPIを提供します。

同様のDate APIが JSR31 でJDK8に導入されることに注意してください。

5
Fredszaq

Java8およびJava9での新しいJava.timeパッケージの使用

import Java.time.LocalDate;

LocalDate mydate = LocalDate.now(); // Or whatever you want
mydate = mydate.minusMonths(1);

この方法を使用する利点は、月の長さを変更することに関する問題をすべて回避し、日付と範囲をより柔軟に調整できることです。 Local部分もTimezoneスマートなので、それらの間で簡単に変換できます。

余談ですが、Java.timeを使用すると、曜日、月の日、月の最後までのすべての日、特定の曜日までのすべての日なども取得できます。

mydate.plusMonths(1);
mydate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)).getDayOfMonth();
mydate.with(TemporalAdjusters.lastDayOfMonth());
2