【Java入門】Dateクラスで現在日時の取得と加算/減算などの計算(add)

こんにちは!フリーエンジニアのせきです。

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型の変換を忘れてしまったら、この記事を思い出して下さい!

この記事を書いた人

フリーランスでWebシステム開発やゲーム開発をしています。
読者の方にプログラミングの面白さをお伝えしたいです。

目次