【Java】日付・時刻を計算する

Java imageJava
Java image
Java

日時の差分を取得する

Periodクラス、Durationクラス

日時の差分を取得するには下記を使用します。
java.time.Periodクラス(日付間隔)

メソッド間隔
int getYears()年数
int getMonths()月数
int get Days()日数
java.time.Period Class

java.time.Durationクラス(時間間隔)

メソッド概要
long toDays()日数
long toHours()時間数
long toMinutes()分数
long toSeconds()秒数
long toMillis()ミリ秒数
long to Nanos()ナノ秒数
java.time.Duration Class

ファイル構成

ファイル構成は下記のようになっています。ビルドツール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

コメント

タイトルとURLをコピーしました