【Java】日時の取得や計算 - Calendarクラスの使い方
- 作成日:2022/01/29
- 更新日:2022/01/31
Javaで日時を扱う場合はCalendarクラスが便利です。 Calendarクラスは日時を取得したり計算したりできるものです。
現在の日付を取得したり、+1日や-1日などの計算も可能です。 主な使い方を解説していきます。
現在の日時を取得する
現在の日時はgetメソッドを使います。
import java.util.Calendar;
import java.util.Date;
public class App {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date now= calendar.getTime();
System.out.println(now);
}
}
まず日付に関するクラスを使うため2,3行目のインボートを忘れないようにしましょう。 8行目でCalendarクラスのインスタンスを取得しています。 Calendarクラスの場合はnewを使いません。
9行目で取得したインスタンスの日時を取得しています。日時はgetTimeメソッドで取得できます。戻り値はDate型です。
Fri Jan 28 14:50:51 JST 2022
SimpleDateFormatを使えば、実行結果を「2022/01/28」のように、フォーマットすることもできます。詳しくは以下で解説しています。
年・月・日だけを取得する
Calendarクラスは年だけ、月だけ、日だけを個別に取得することも可能です。
import java.util.Calendar;
import java.util.Date;
public class App {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year=calendar.get(Calendar.YEAR); //年を取得
int month=calendar.get(Calendar.MONTH); //月を取得
int date=calendar.get(Calendar.DATE); //日を取得
System.out.println(year);
System.out.println(month);
System.out.println(date);
}
}
10~12行目のgetメソッドで、現在の年・月・日を取得しています。 引数はCalendarクラスで定義されているCalendar.YEARなどを使います。
ただし、月に関しては始まりが0からなので、現在の月から-1された値が取得されます。
2022
0
28
これは1月に実行した結果ですが、月が0になっていますね。 なので、現在の月を表現したい場合は、取得した値に+1をする必要があります。
加算・減算する
Calendarクラスは年・月・日の計算も可能です。10~12行目で加算・減算しています。
import java.util.Calendar;
import java.util.Date;
public class App {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.YEAR, 1); //年を+1
calendar.add(Calendar.MONTH, 2); //月を+2
calendar.add(Calendar.DATE, -1); //日付を-1
int year=calendar.get(Calendar.YEAR); //年を取得
int month=calendar.get(Calendar.MONTH); //月を取得
int date=calendar.get(Calendar.DATE); //日を取得
System.out.println(year);
System.out.println(month);
System.out.println(date);
}
}
計算にはaddメソッドを使います。2022年1月28日に対して上記の加算・減算すると次のようになります。
2023
2
27
上述した通り、月は現在の月の-1となるので、1月に+2をすると2という結果になります。
日時を設定する
Calendarクラスで取得したインスタンスに指定の日時を設定する方法です。
import java.util.Calendar;
import java.util.Date;
public class App {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
//年・月・日を個別に設定
calendar.set(Calendar.YEAR, 2010);
calendar.set(Calendar.MONTH, 3);
calendar.set(Calendar.DATE, 10);
System.out.println(calendar.getTime());
//年月日をまとめて設定
calendar.set(2020, 4, 25);
System.out.println(calendar.getTime());
//年月日+時間を設定
calendar.set(2030, 1, 1, 12, 30);
System.out.println(calendar.getTime());
}
}
日時の設定はsetメソッドを使います。引数により設定できるものが異なります。 11~13行目では年・月・日を別々に設定しています。
17行目では年月日をまとめて設定していて、18行目ではさらに時間も合わせて設定しています。
Sat Apr 10 20:13:42 JST 2010
Mon May 25 20:13:42 JST 2020
Fri Feb 01 12:30:42 JST 2030
注意点としては、月は0始まりなので、通常は0~11の値を設定します。例えば、4月を設定したい場合は3を設定します。
月の設定に12以上を設定することもできますが、その場合は12が0、13が1・・といったようになります。
Date型をCalendar型へ変換する
Date型も日時を扱えるクラスですが、Date型で取得した日時をCalendar型に変換することが可能です。 CalendarクラスのsetTimeメソッドを使います(11行目)。
import java.util.Calendar;
import java.util.Date;
public class App {
public static void main(String[] args) {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.getTime());
}
}
8行目でDateクラスのインスタンス生成をして現在の日時を取得しています。 11行目のsetTimeメソッドは引数にDate型のインスタンスを渡すことで、Calendar型に変換してくれます。
上記の例だとsetTimeメソッドの引数に、現在の日時情報をもったdate変数を渡すことで、 calendar変数にdate変数の日時情報を変換して格納しています。
Sat Jan 29 01:37:33 JST 2022