Java 日時の加算と減算のサンプル

Javaの日時の加算と減算のサンプルです。
LocalDateTimeクラスはJavaSE8で導入されました。計算がわかりやすくなっています。

目次

日時を加算するサンプル(LocalDateTimeクラス)

LocalDateTimeクラスで日時を指定して加算するサンプルです。

package test1;

import java.time.LocalDateTime;

public class Test1 {
	public static void main(String[] args) {
		
		// 指定日時をセット 2016/12/30 22:30:10
		LocalDateTime d = LocalDateTime.of(2016,12,30,22,30,10);
		
		//2年後を求める
		LocalDateTime d1 = d.plusYears(2);
		System.out.println(d1); //2018-12-30T22:30:10
		
		//2ヶ月後を求める
		LocalDateTime d2 = d.plusMonths(2);
		System.out.println(d2); //2017-02-28T22:30:10
		
		//2日後を求める
		LocalDateTime d3 = d.plusDays(2);
		System.out.println(d3); //2017-01-01T22:30:10
		
		//2時間20分20秒後を求める
		LocalDateTime d4 = d.plusHours(2).plusMinutes(20).plusSeconds(20);
		System.out.println(d4); //2016-12-31T00:50:30
	}
}

9行目の指定日時の引数は、月を-1する必要がありません。(Calendarクラスでは必要です)
12,16,20,24行目のメソッドは、足し算を意味するplus***という名称になっています。

 

日時を減算するサンプル(LocalDateTimeクラス)

LocalDateTimeクラスで日時を指定して減算するサンプルです。

package test1;

import java.time.LocalDateTime;

public class Test1 {
	public static void main(String[] args) {
		
		// 指定日時をセット 2016/12/30 22:30:10
		LocalDateTime d = LocalDateTime.of(2016,12,30,22,30,10);
		
		//2年前を求める
		LocalDateTime d1 = d.minusYears(2);
		System.out.println(d1); //2014-12-30T22:30:10
		
		//2ヶ月前を求める
		LocalDateTime d2 = d.minusMonths(2);
		System.out.println(d2); //2016-10-30T22:30:10
		
		//2日前を求める
		LocalDateTime d3 = d.minusDays(2);
		System.out.println(d3); //2016-12-28T22:30:10
		
		//2時間20分20秒前を求める
		LocalDateTime d4 = d.minusHours(2).minusMinutes(20).minusSeconds(20);
		System.out.println(d4); //2016-12-30T20:09:50
	}
}

9行目の指定日時の引数は、月を-1する必要がありません。(Calendarクラスでは必要です)
12,16,20,24行目のメソッドは、引き算を意味するminus***という名称になっています。

 

LocalDateTimeクラス(JavaSE8から)

イミュータブル

  • インスタンスを作成した後、そのインスタンスの状態が変わらないことです。
  • 日付を加算をしても元のインスタンスは変わらず新しいインスタンスを返します。
  • Calendarクラスのインスタンスは状態を変えることができます。→ミュータブルです。

 

Calendarクラスで2日後を求める

Calendarクラスで2日後を求めるサンプルです。
2016年12月30日 22:30:10の2日後を求めます。

package test1;

import java.util.Calendar;

public class Test1 {
	public static void main(String[] args) {
		
		// インスタンスを生成
		Calendar cal = Calendar.getInstance();
		
		// 指定日時をセット 2016/12/30 22:30:10
		// 注:月は0から始まり、11で終わる
		cal.set(2016,11,30,22,30,10);
		
		// 指定した日時の2日後を求める
		cal.add(Calendar.DATE, 2);

		// 日時の取得
		int d1 = cal.get(Calendar.YEAR);
		int d2 = cal.get(Calendar.MONTH) + 1; //月は0~11なので1を足す
		int d3 = cal.get(Calendar.DATE);
		int d4 = cal.get(Calendar.HOUR_OF_DAY);
		int d5 = cal.get(Calendar.MINUTE);
		int d6 = cal.get(Calendar.SECOND);
		
		// 結果 2017/1/1 22:30:10
		System.out.println(d1 + "/" + d2 + "/" + d3 +
		" " + d4 + ":"+ d5 + ":"+ d6);
	}
}

16行目のaddメソッドで2日後を求めています。

 

Calendarクラスで1日前を求める

Calendarクラスで1日前を求めるサンプルです。
2017年1月1日 22:30:10の1日前を求めます。

package test1;

import java.util.Calendar;

public class Test1 {
	public static void main(String[] args) {
		
		// インスタンスを生成
		Calendar cal = Calendar.getInstance();
		
		// 指定日時をセット 2017/1/1 22:30:10
		// 注:月は0から始まり、11で終わる
		cal.set(2017,0,1,22,30,10);
		
		// 指定した日時の1日前を求める
		cal.add(Calendar.DATE, -1);

		// 日時の取得
		int d1 = cal.get(Calendar.YEAR);
		int d2 = cal.get(Calendar.MONTH) + 1; //月は0~11なので1を足す
		int d3 = cal.get(Calendar.DATE);
		int d4 = cal.get(Calendar.HOUR_OF_DAY);
		int d5 = cal.get(Calendar.MINUTE);
		int d6 = cal.get(Calendar.SECOND);
		
		// 結果 2016/12/31 22:30:10
		System.out.println(d1 + "/" + d2 + "/" + d3 +
		" " + d4 + ":"+ d5 + ":"+ d6);
	}
}

16行目のaddメソッドで1日前を求めています。

 

Calendarクラスで3時間後を求める

Calendarクラスで3時間後を求めるサンプルです。
2016年12月31日 22:30:10の3時間後を求めます。

package test1;

import java.util.Calendar;

public class Test1 {
	public static void main(String[] args) {
		
		// インスタンスを生成
		Calendar cal = Calendar.getInstance();
		
		// 指定日時をセット 2016/12/31 22:30:10
		// 注:月は0から始まり、11で終わる
		cal.set(2016,11,31,22,30,10);
		
		// 指定した日時の3時間後を求める
		cal.add(Calendar.HOUR_OF_DAY, 3);

		// 日時の取得
		int d1 = cal.get(Calendar.YEAR);
		int d2 = cal.get(Calendar.MONTH) + 1; //月は0~11なので1を足す
		int d3 = cal.get(Calendar.DATE);
		int d4 = cal.get(Calendar.HOUR_OF_DAY);
		int d5 = cal.get(Calendar.MINUTE);
		int d6 = cal.get(Calendar.SECOND);
		
		// 結果 2017/1/1 1:30:10
		System.out.println(d1 + "/" + d2 + "/" + d3 +
		" " + d4 + ":"+ d5 + ":"+ d6);
	}
}

16行目のaddメソッドで3時間後を求めています。

Calendarクラス(従来のやり方)

関連の記事

Java 現在日時の取得と表示形式のサンプル

△上に戻る