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

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

Javaでは、日時の取得や加算などの計算を行うことができます。

この記事では、

  • 現在の日時を取得
  • 加算されるDate型の日時の作成
  • Date型の日時の加算、減算
  • 加算後のDate型への変換
  • 現在の時間を取得して日時を計算する方法

などの基本的な内容から、応用的な内容に関しても解説していきます。今回はそんな日時の加算について、さまざまな方法をわかりやすく解説します!

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については、以下の記事で詳しく解説しています。

【Java入門】SimpleDateFormatで日付フォーマットの設定
更新日 : 2019年5月28日

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のさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java】Dateクラスで日付を扱う方法を5つのパターン別に解説
更新日 : 2019年10月14日

Calender型についてもっと詳しく知りたい方へ

Calenderのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

【Java入門】Calendarクラスの使い方総まとめ
更新日 : 2019年10月23日

まとめ

今回はDate型の日時の加算をする方法について解説しました。

Date型の日時の加算にはCalendarクラスを使うことがポイントです。日時の加算方法、Date型とCalendar型の変換を忘れてしまったら、この記事を思い出して下さい!

「プログラミング、右も左もわからない…」という方にオススメ

当プログラミングスクール「侍エンジニア塾」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニア塾は上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

書いた人

せき

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

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー