覚えたら書く

IT関係のデベロッパとして日々覚えたことを書き残したいです。twitter: @yyoshikaw

java.time.LocalTime

java.time.LocalTimeの利用サンプルです。

サンプルコードで試したのは以下の通りです。


現在時刻の取得

■API

  • LocalTime#now

■サンプル

LocalTime time1 = LocalTime.now();
System.out.println("time1 : " + time1);

■実行結果

time1 : 10:30:13.779


特定の時刻を指定してインスタンス生成

■API

  • LocalTime#of

■サンプル

// 時・分を指定(23時59分)
LocalTime time2 = LocalTime.of(23, 59);
System.out.println("time2 : " + time2);

// 時・分・秒を指定(0時1分2秒)
LocalTime time3 = LocalTime.of(0, 1, 2);
System.out.println("time3 : " + time3);

// 時・分・秒・ナノ秒指定(23時59分59秒10ナノ秒)
LocalTime time4 = LocalTime.of(23, 59, 59, 59);
System.out.println("time4 : " + time4);

■実行結果

time2 : 23:59
time3 : 00:01:02
time4 : 23:59:59.000000059


時・分・秒の個別取得

■API

  • LocalTime#getHour
  • LocalTime#getMinute
  • LocalTime#getSecond
  • LocalTime#getNano

■サンプル

// 12時30分20秒を生成
LocalTime time5 = LocalTime.of(12, 30, 20);
System.out.println("time5 : ");
// 時・分・秒・ナノ秒を個別に取り出す
System.out.println(" 時:" + time5.getHour());
System.out.println(" 分:" + time5.getMinute());
System.out.println(" 秒:" + time5.getSecond());
System.out.println(" ナノ秒:" + time5.getNano());

■実行結果

time5 : 
 時:12
 分:30
 秒:20
 ナノ秒:0


加減算

■API

  • LocalTime#plusSeconds
  • LocalTime#plusMinutes
  • LocalTime#plusHours
  • LocalTime#minusSeconds
  • LocalTime#minusMinutes
  • LocalTime#minusHours
  • LocalTime#plus(Duration)
  • LocalTime#minus(Duration)

■サンプル

// 秒・分・時間を加減算してみる
LocalTime time6 = LocalTime.of(12, 30, 20);
System.out.println(time6 + "の10秒後: " + time6.plusSeconds(10));
System.out.println(time6 + "の30分後: " + time6.plusMinutes(30));
System.out.println(time6 + "の1時間後: " + time6.plusHours(1));
System.out.println(time6 + "の30秒前: " + time5.minusSeconds(30));
System.out.println(time6 + "の3分前: " + time5.minusMinutes(3));
System.out.println(time6 + "の13時間前: " + time5.minusHours(13));

LocalTime time7 = LocalTime.of(11, 22, 33);
// 7分間を加算・減算してみる
System.out.println(time7 + "の7分後: " + time7.plus(Duration.ofMinutes(7)));
System.out.println(time7 + "の7分前: " + time7.minus(Duration.ofMinutes(7)));

実行結果

12:30:20の10秒後: 12:30:30
12:30:20の30分後: 13:00:20
12:30:20の1時間後: 13:30:20
12:30:20の30秒前: 12:29:50
12:30:20の3分前: 12:27:20
12:30:20の13時間前: 23:30:20
11:22:33の7分後: 11:29:33
11:22:33の7分前: 11:15:33


文字列からのparse

■API

  • LocalTime#parse

■サンプル

// 時刻文字列からparseしてみる
LocalTime time8 = LocalTime.parse("12:34:56", DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println("time8 : " + time8);

■実行結果

time8 : 12:34:56


不正な時刻の生成

■サンプル

// 存在しない23時61分0秒とか指定するとDateTimeExceptionがスローされる
try {
    LocalTime.of(23, 61, 0);
} catch (DateTimeException e) {
    e.printStackTrace();
}

■実行結果

java.time.DateTimeException: Invalid value for MinuteOfHour (valid values 0 - 59): 61
    at java.time.temporal.ValueRange.checkValidValue(ValueRange.java:311)
    at java.time.temporal.ChronoField.checkValidValue(ChronoField.java:703)
    at java.time.LocalTime.of(LocalTime.java:321)
    at sample.java8.Java8LocalTimeClient.main(Java8LocalTimeClient.java:59)




試したソースコードの全体は以下です。

import java.time.DateTimeException;
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

public class Java8LocalTimeClient {

    public static void main(String[] args) {

        // 現在時刻
        LocalTime time1 = LocalTime.now();
        System.out.println("time1 : " + time1);

        // 時・分を指定(23時59分)
        LocalTime time2 = LocalTime.of(23, 59);
        System.out.println("time2 : " + time2);

        // 時・分・秒を指定(0時1分2秒)
        LocalTime time3 = LocalTime.of(0, 1, 2);
        System.out.println("time3 : " + time3);

        // 時・分・秒・ナノ秒指定(23時59分59秒10ナノ秒)
        LocalTime time4 = LocalTime.of(23, 59, 59, 59);
        System.out.println("time4 : " + time4);

        // 12時30分20秒を生成
        LocalTime time5 = LocalTime.of(12, 30, 20);
        System.out.println("time5 : ");
        // 時・分・秒・ナノ秒を個別に取り出す
        System.out.println(" 時:" + time5.getHour());
        System.out.println(" 分:" + time5.getMinute());
        System.out.println(" 秒:" + time5.getSecond());
        System.out.println(" ナノ秒:" + time5.getNano());

        // 秒・分・時間を加減算してみる
        LocalTime time6 = LocalTime.of(12, 30, 20);
        System.out.println(time6 + "の10秒後: " + time6.plusSeconds(10));
        System.out.println(time6 + "の30分後: " + time6.plusMinutes(30));
        System.out.println(time6 + "の1時間後: " + time6.plusHours(1));
        System.out.println(time6 + "の30秒前: " + time5.minusSeconds(30));
        System.out.println(time6 + "の3分前: " + time5.minusMinutes(3));
        System.out.println(time6 + "の13時間前: " + time5.minusHours(13));

        LocalTime time7 = LocalTime.of(11, 22, 33);
        // 7分間を加算・減算してみる
        System.out.println(time7 + "の7分後: " + time7.plus(Duration.ofMinutes(7)));
        System.out.println(time7 + "の7分前: " + time7.minus(Duration.ofMinutes(7)));

        // 時刻文字列からparseしてみる
        LocalTime time8 = LocalTime.parse("12:34:56", DateTimeFormatter.ofPattern("HH:mm:ss"));
        System.out.println("time8 : " + time8);

        System.out.println("###");

        // 存在しない23時61分0秒とか指定するとDateTimeExceptionがスローされる
        try {
            LocalTime.of(23, 61, 0);
        } catch (DateTimeException e) {
            e.printStackTrace();
        }
    }
}



関連エントリ