日時の差分を取得する
Periodクラス、Durationクラス
日時の差分を取得するには下記を使用します。
java.time.Periodクラス(日付間隔)
メソッド | 間隔 |
int getYears() | 年数 |
int getMonths() | 月数 |
int get Days() | 日数 |
java.time.Durationクラス(時間間隔)
メソッド | 概要 |
long toDays() | 日数 |
long toHours() | 時間数 |
long toMinutes() | 分数 |
long toSeconds() | 秒数 |
long toMillis() | ミリ秒数 |
long to Nanos() | ナノ秒数 |
ファイル構成
ファイル構成は下記のようになっています。ビルドツールGradleを使っているので、たくさんファイルが並んでいますが、必要なのはの(1)と(2)の2つだけです。
$ tree
.
├── app
(中略)
│ ├── build.gradle
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── sample
│ │ │ └── dateTime
│ │ │ ├── App.java // (1) main()関数を含む
│ │ │ └── util
│ │ │ └── CalcDateTime.java // (2) 日時差分処理クラス
(省略)
サンプルソースコード
日時計算メソッド
package sample.dateTime.util;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.Duration;
//import java.time.format.DateTimeFormatter;
public class CalcDateTime {
// Peridoクラス
public static void PrintPeriod(LocalDateTime start, LocalDateTime end){
var period = Period.between(start.toLocalDate(), end.toLocalDate());
System.out.println("日付の差:" +
period.getYears() + "年" +
period.getMonths() + "月" +
period.getDays() + "日間");
}
// Durationクラス(日数差)
public static void PrintIntervalDays(LocalDateTime start, LocalDateTime end){
var duration = Duration.between(start, end);
System.out.println("日数差 :" + duration.toDays() + "日間");
}
// Durationクラス(時間間隔)
public static void PrintIntervalHours(LocalDateTime start, LocalDateTime end){
var duration = Duration.between(start, end);
System.out.println("時間差 :" + duration.toHours() + "時間");
}
// Durationクラス(分間隔)
public static void PrintIntervalMinutes(LocalDateTime start, LocalDateTime end){
var duration = Duration.between(start, end);
System.out.println("分間差 :" + duration.toMinutes() + "分間");
}
// Durationクラス(秒間隔)
public static void PrintIntervalSeconds(LocalDateTime start, LocalDateTime end){
var duration = Duration.between(start, end);
System.out.println("秒間差 :" + duration.toSeconds() + "秒間");
}
}
main()メソッド
package sample.dateTime;
import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.LocalTime;
import sample.dateTime.util.CalcDateTime;
public class App {
public static void main(String[] args) {
//比較対象日時1の設定
var dt1 = LocalDateTime.of(2019, 4, 1, 12, 00, 00);
System.out.println("target time 1 : " + dt1);
//比較対象日時2の設定
var dt2 = LocalDateTime.of(2021, 10, 15, 20, 30, 10);
System.out.println("target time 2 : " + dt2);
//CalcDateTime()クラスををインスタンス化
var calc = new CalcDateTime();
//日付の間隔を表示する(Periodクラス)
calc.PrintPeriod(dt1, dt2);
//日数差を表示する(Durationクラス)
calc.PrintIntervalDays(dt1,dt2);
//時間差を表示する(Durationクラス)
calc.PrintIntervalHours(dt1,dt2);
//分間隔を表示する(Durationクラス)
calc.PrintIntervalMinutes(dt1,dt2);
//秒間隔を表示する(Durationクラス)
calc.PrintIntervalSeconds(dt1,dt2);
}
}
実行結果
target time 1 : 2019-04-01T12:00
target time 2 : 2021-10-15T20:30:10
日付の差:2年6月14日間
日数差 :928日間
時間差 :22280時間
分間差 :1336830分間
秒間差 :80209810秒間
対象日時を逆にすると、マイナスの値が得られます
target time 1 : 2019-04-01T12:00
target time 2 : 2021-10-15T20:30:10
日付の差:-2年-6月-14日間
日数差 :-928日間
時間差 :-22280時間
分間差 :-1336830分間
秒間差 :-80209810秒間
日付、時間を計算する(加算/減算)
基本構文(plusメソッド/minusメソッド)
日時クラス(java.time.LocalDateTime/java.time.LocalDate/java.time.Period/java.time.Duration)のplusメソッド、minusメソッドを使用します。
public T plus(long amountToAdd, TemporalUnit unit) //加算
public T minus(long amountToAdd, TemporalUnit unit) //減算
T :任意の日時オブジェクト
amountToAdd:増減数(long型)
unit:単位(年、月、日、時間、e.c.t)
単位にはTemporalUnitインタフェースの実装クラスChronoUnit(列挙型)で指定します。
unit値 | 単位 |
YEARS | 年 |
MONTHS | 月 |
WEEKS | 週 |
DAYS | 日 |
HOURS | 時 |
MINUTES | 分 |
SECONDS | 秒 |
MILLIS | ミリ秒 |
MICROS | マイクロ秒 |
NANOS | ナノ秒 |
または、特定の単位で日時を計算するメソッドも用意されています。(ミリ秒の計算メソッドはないので注意!)
メソッド | 概要 |
plusYears(long years) | 年数を加算 |
minusYears(long years) | 年数を減算 |
plusMonths(long months) | 月数を加算 |
minusMonths(long months) | 月数を減算 |
plusWeeks(long weeks) | 週数を加算 |
minusWeeks(long weeks) | 週数を減算 |
plusDays(long days) | 日数を加算 |
minusDays(long days) | 日数を減算 |
plusHours(long hours) | 時間数を加算 |
minusHours(long hours) | 時間数を減算 |
plusMinutes(long minutes) | 分数を加算 |
minusMinutes(long minutes) | 分数を減算 |
plusSeconds(long seconds) | 秒数を加算 |
minusSeconds(long seconds) | 秒数を減算 |
plusNanos(long nanos) | ナノ秒数を加算 |
minusNanos(long nanos) | ナノ秒数を減算 |
サンプルソースコード
package sample.dateTime;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
public class App {
public static void main(String[] args) {
//基準日時の設定
var dt1 = LocalDateTime.of(2019, 4, 1, 12, 00, 00);
System.out.println("基準日時 : " + dt1);
//日数の加算・減算
var plusResult=dt1.plus(200, ChronoUnit.DAYS);
System.out.println("200日後 : " + plusResult);
var minusResult=dt1.minus(200, ChronoUnit.DAYS);
System.out.println("200日前 : " + minusResult);
}
}
実行結果
基準日時 : 2019-04-01T12:00
200日後 : 2019-10-18T12:00
200日前 : 2018-09-13T12:00
コメント