こんにちは!フリーエンジニアのせきです。
Javaでは、日時の取得や加算などの計算を行うことができます。
この記事では、
- 現在の日時を取得
- 加算されるDate型の日時の作成
- Date型の日時の加算、減算
- 加算後のDate型への変換
- 現在の時間を取得して日時を計算する方法
などの基本的な内容から、応用的な内容に関しても解説していきます。今回はそんな日時の加算について、さまざまな方法をわかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
Dateクラスとは
Dateクラスは日時を取得したり、日時を計算するときに使用する日付型のクラスです。Dateクラスを使用するには「import java.util.Date」のインポート文が必要です。
現在の日時を取得する方法
ここでは、Dateクラスを使って現在日時を取得する方法を解説します。
new演算子使用してDateクラスのインスタンスを生成した時点で、Dateクラスのオブジェクトには現在の日時が返されます。現在日時を取得する方法を次のプログラムで確認してみましょう。
import java.util.Date; public class Main { public static void main(String[] args) { Date date = new Date(); System.out.println("現在の時刻は" + date + "です"); } }
実行結果:
現在の時刻はTue May 01 13:04:42 JST 2018です
このようにして現在の日時を取得することができました。
Date型のフォーマットを指定する方法
SimpleDateFormatクラスを使うと、任意の日時フォーマットでDate型の日時を作成することができます。
import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); try { Date date = sdf.parse("2017/01/01 12:00:00"); System.out.println(date.toString()); } catch(ParseException e) { e.printStackTrace(); } } }
実行結果:
Sun Jan 01 12:00:00 UTC 2017
“yyyy/MM/dd HH:mm:ss”が任意の日時フォーマットです。ここで指定したフォーマットを使い、次の行で日時を設定しています。
SimpleDateFormatについては、以下の記事で詳しく解説しています。
Date型の日時をCalendarクラスで計算する方法
日時の加算をするメソッドはCalendarクラスに用意されています。そのため、さきほど作成したDate型の日時をCalendar型に変換する必要があります。
Calendar calendar = Calendar.getInstance(); calendar.setTime(date);
Calendarクラスのインスタンスを作りsetTimeメソッドにDate型の日時を指定することで、Calendarクラスのインスタンスに日時が設定されます。これで、加算する準備はできました。
加算する方法
まずは月の加算をしてみます。加算はCalendarクラスのaddメソッドを使います。
calendar.add(Calendar.MONTH, 3);
第1引数が加算するフィールド、第2引数が加算する量です。これで、3月分が加算されます。例えば、2017年4月現在、3が加算されると2017年7月になります。
今度は日付ではなく、時間の加算です。分の加算をしてみます。
calendar.add(Calendar.MINUTE, 5);
これで、5分が加算されます。日時と同じですね。
加算するフィールドは日付、時間ともにCalendarクラスに定数が用意されていますので、それを使います。
減算する方法
Calendarクラスのaddメソッドは、加算だけでなく減算もすることができます。減算する時は、第2引数の加算する量をマイナス値で指定します。
calendar.add(Calendar.MONTH, -3);
このようにすると、3月分が減算されます。例えば、2017年4月現在、3が減算されると2017年1月ですね。
Calender型からDate型に変換する方法
加算した結果を、任意の日時フォーマットで表示してみます。
そのためには、Calendar型の日時をDate型に戻して、SimpleDateFormatクラスを使います。Date型に戻すには、CalendarクラスのgetTimeメソッドを使います。
import java.util.Calendar; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { // 加算されるDate型の日時の作成 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); try { date = sdf.parse("2017/01/01 12:00:00"); } catch(ParseException e) { e.printStackTrace(); } // Date型の日時をCalendar型に変換 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 日時を加算する calendar.add(Calendar.MONTH, 3); calendar.add(Calendar.MINUTE, 5); calendar.add(Calendar.MONTH, -1); // Calendar型の日時をDate型に戻す Date d1 = calendar.getTime(); System.out.println(sdf.format(d1)); } }
実行結果:
2017/03/01 12:05:00
SimpleDateFormatクラスのformatメソッドにDate型の日時を渡すと、最初にSimpleDateFormatに指定した日時フォーマットで、日時を文字列で返してくれます。
現在の時間を取得して日時を計算する方法
日時を計算する場合、現在の時間に対して加算、減算することがよくあります。現在の時間を取得するにはDateクラスを使う方法とCalenderクラスを使う方法があります。
それぞれの方法について使い方をみていきましょう。
Dateクラスを使う場合
Dateクラスを使って現在の時間を取得する場合、引数なしでDateオブジェクトを生成することで取得することができます。
import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { // 加算される現在時間の取得(Date型) SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Date date = new Date(); // Date型の日時をCalendar型に変換 Calendar calendar = Calendar.getInstance(); calendar.setTime(date); // 日時を加算する calendar.add(Calendar.MONTH, 3); // Calendar型の日時をDate型に戻す Date d1 = calendar.getTime(); System.out.println(sdf.format(d1)); } }
実行結果:
2017/07/01 02:46:52
Calenderクラスを使う場合
Calenderクラスを使って現在の時間を取得する場合、getInstanceメソッドで Calendar オブジェクトを生成することで取得することができます。
import java.util.Calendar; import java.util.Date; import java.text.SimpleDateFormat; public class Main { public static void main(String[] args) { // Date型のフォーマットの設定 SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); // 加算される現在時間の取得(Calender型) Calendar calendar = Calendar.getInstance(); // 日時を加算する calendar.add(Calendar.MONTH, 3); // Calendar型の日時をDate型に変換 Date d1 = calendar.getTime(); System.out.println(sdf.format(d1)); } }
実行結果:
2017/07/01 02:58:38
Date型についてもっと詳しく知りたい方へ
Dateのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
Calender型についてもっと詳しく知りたい方へ
Calenderのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!
まとめ
今回はDate型の日時の加算をする方法について解説しました。
Date型の日時の加算にはCalendarクラスを使うことがポイントです。日時の加算方法、Date型とCalendar型の変換を忘れてしまったら、この記事を思い出して下さい!