Cookie#setMaxAge(int)HttpSession#setMaxInactiveInterval(int)のように期間を秒数で受けるようなAPIは少なくありません。旧来のJava7以前であれば、秒数計算をしていたかと思いますが、Java8以降ではjava.time.Durationを使用して、これをスマートにわかりやすく記述できるようになっています。

環境要件

  • OpenJDK JDK 10.0.2+13

デモ

https://repl.it/@yo1000/TimeUnitConversion

従来の書き方(Java7まで)

こんな書き方。よくやってましたよね。

public class Main {
    public static void main(String[] args) throws Exception {
        long secondsOf30Days = 30L * 24L * 60L * 60L; // days * hours * mins * secs
        
        System.out.println("seconds of 30 days: " + secondsOf30Days);
    }
}

Durationを使った書き方(Java8以降)

Durationを使用すると以下のように書けます。

import java.time.*;

public class Main {
    public static void main(String[] args) throws Exception {
        long secondsFrom30Days = Duration.ofDays(30).getSeconds();
        
        System.out.println("seconds from 30 days: " + secondsFrom30Days);
    }
}

Durationでは、今回の例の他にも、時、分、ミリ秒、ナノ秒も扱えるため、時間範囲の単位変換には便利に使っていくことができます。

参考