Java 日時の差分を求めるサンプル

Javaの日時の差分を求めるサンプルです。

目次

サンプル 月の差分を求める
  日の差分を求める
  時間・分・秒の差分を求める

月の差分を求める

public enum ChronoUnit
  MONTHS("Months", Duration.ofSeconds(31556952L / 12))
  public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)

年月の差分を求めるサンプルです。
2019年10月から2020年1月の差分を求めます。

package test1;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
 
public class Test1 {
	public static void main(String[] args) {
		// 1.年月日をセット
		LocalDate date1 = LocalDate.of(2019,10,01);
		// 2.年月日をセット
		LocalDate date2 = LocalDate.of(2020,1,12);
		
		System.out.println(
				ChronoUnit.MONTHS.between(date1,date2)); //3
		
		final String FORMAT = "yyyy-MM-dd";
		
		// 3.年月日をセット
		LocalDate date3 = LocalDate.parse
				("2019-10-01", DateTimeFormatter.ofPattern(FORMAT));
		// 4.年月日をセット
		LocalDate date4 = LocalDate.parse
				("2020-01-12", DateTimeFormatter.ofPattern(FORMAT));
		
		System.out.println(
				ChronoUnit.MONTHS.between(date3,date4)); //3
 	}
}

ChronoUnitのMONTHSとbetweenメソッドで年月の差分を求めています。
20,23行目は、年月日がyyyy-MM-ddのString型の場合です。

Chronoは、時という意味です。

以下は、OracleのChronoUnit列挙型のリンクです。
https://docs.oracle.com/javase/jp/8/docs/api/java/time/temporal/ChronoUnit.html#between-java.time.temporal.Temporal-java.time.temporal.Temporal-

 

日の差分を求める

public enum ChronoUnit
  DAYS("Days", Duration.ofSeconds(86400))
  public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)

日数の差分を求めるサンプルです。
2019/12/31の0時から2020/1/2の0時の差分を求めます。

package test1;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
 
public class Test1 {
	public static void main(String[] args) {
		// 1.年月日をセット
		LocalDate date1 = LocalDate.of(2019,12,31);
		// 2.年月日をセット
		LocalDate date2 = LocalDate.of(2020,1,2);
		
		System.out.println(ChronoUnit.DAYS.between(date1,date2)); //2
		
		final String FORMAT = "yyyy-MM-dd";
		
		// 3.年月日をセット
		LocalDate date3 = LocalDate.parse
				("2019-12-31", DateTimeFormatter.ofPattern(FORMAT));
		// 4.年月日をセット
		LocalDate date4 = LocalDate.parse
				("2020-01-02", DateTimeFormatter.ofPattern(FORMAT));
		
		System.out.println(ChronoUnit.DAYS.between(date3,date4)); //2
 	}
}

ChronoUnitのDAYSとbetweenメソッドで日の差分を求めています。
19,22行目は、年月日がyyyy-MM-ddのString型の場合です。

 

時間・分・秒の差分を求める

public enum ChronoUnit
  HOURS("Hours", Duration.ofSeconds(3600))
  MINUTES("Minutes", Duration.ofSeconds(60))
  SECONDS("Seconds", Duration.ofSeconds(1))
  public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive)

時・分・秒の差分を求めるサンプルです。

package test1;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
 
public class Test1 {
	public static void main(String[] args) {
		// 1.年月日時分秒をセット
		LocalDateTime date1 = LocalDateTime.of(2019,12,31,0,0,0);
		// 2.年月日時分秒をセット
		LocalDateTime date2 = LocalDateTime.of(2020,1,2,0,0,0);
		
		System.out.println(
				ChronoUnit.HOURS.between(date1,date2)); //48 (時間)
		System.out.println(
				ChronoUnit.MINUTES.between(date1,date2)); //2880 (分)
		System.out.println(
				ChronoUnit.SECONDS.between(date1,date2)); //172800 (秒)
		
		final String FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";
		
		// 3.年月日時分秒をセット
		LocalDateTime date3 = LocalDateTime.parse
				("2019-12-31 00:00:00.000", DateTimeFormatter.ofPattern(FORMAT));
		// 4.年月日時分秒をセット
		LocalDateTime date4 = LocalDateTime.parse
				("2020-01-02 00:00:00.000", DateTimeFormatter.ofPattern(FORMAT));
		
		System.out.println(
				ChronoUnit.HOURS.between(date3,date4)); //48 (時間)
		System.out.println(
				ChronoUnit.MINUTES.between(date3,date4)); //2880 (分)
		System.out.println(
				ChronoUnit.SECONDS.between(date3,date4)); //172800 (秒)
 	}
}

ChronoUnitのHOURS,MINUTES,SECONDSとbetweenメソッドで時間・分・秒の差分を求めています。
24,27行目は、年月日がyyyy-MM-dd HH:mm:ss.SSSのString型の場合です。

関連の記事

Java 現在日時の取得と表示形式のサンプル
Java 日時を計算するサンプル(加算と減算)

△上に戻る