m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

java8のLocalDateとLocalTimeを触ってみた

Java8から導入された機能

日付制御ではDateやCalendarなどを使用していたがSE8より導入された

サンプルコード

Main.java
import java.time.*;

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");

        // 現在日付
        LocalDate ld = LocalDate.now();
        System.out.println(ld);

        // 日付を指定
        LocalDate ld2 = LocalDate.of(2011, 04, 28);
        System.out.println(ld2);

        // 文字列をパースして日付を設定
        LocalDate ld3 = LocalDate.parse("2014-06-23");
        System.out.println(ld3);

        // 現在年の1月1日
        LocalDate ld4 = LocalDate.now()
                .withMonth(1)
                .withDayOfMonth(1);
        System.out.println(ld4);

        // 前月の末日
        LocalDate ld5 = LocalDate.now()
                .withDayOfMonth(1)
                .minusDays(1);
        System.out.println(ld5);

        // 翌日の月初
        LocalDate ld6 = LocalDate.now()
                .plusMonths(1)
                .withDayOfMonth(1);
        System.out.println(ld6);

        // 現在日時
        LocalTime lt = LocalTime.now();
        System.out.println(lt);

        // 時刻を指定
        LocalTime lt2 = LocalTime.of(10, 34, 45);
        System.out.println(lt2);

        // 文字列をパースして時刻を設定
        LocalTime lt3 = LocalTime.parse("23:44:12");
        System.out.println(lt3);

        // 現在日時の0分0秒
        LocalTime lt4  = LocalTime.now()
                .withMinute(0)
                .withSecond(0)
                .withNano(0);
        System.out.println(lt4);

        // 現在時刻の10時間語
        LocalTime lt5 = LocalTime.now()
                .plusHours(10);
        System.out.println(lt5);

        // 現在時刻の7200秒前
        LocalTime lt6 = LocalTime.now()
                .minusSeconds(7200);
        System.out.println(lt6);

        // 現在日時
        LocalDateTime ldt1 = LocalDateTime.now();
        System.out.println(ldt1);

        // 日時を指定
        LocalDateTime ldt2 = LocalDateTime.of(2012, 10, 30, 03, 50, 12);
        System.out.println(ldt2);

        // 文字列で日時を設定
        LocalDateTime ldt3 = LocalDateTime.parse("2013-10-12T16:04:23");
        System.out.println(ldt3);

        // 現在年の1月1日0時0分
        LocalDateTime ldt4 = LocalDateTime.now()
                .withMonth(1)
                .withDayOfMonth(1)
                .withHour(0)
                .withMinute(0)
                .withSecond(0)
                .withNano(0);
        System.out.println(ldt4);

        // 前年
        LocalDateTime ldt5 = LocalDateTime.now()
                .withMonth(1)
                .withDayOfMonth(1)
                .withHour(0)
                .withMinute(0)
                .withSecond(0)
                .withNano(0)
                .minusNanos(1);
        System.out.println(ldt5);


    }
}

Hello World!
2016-09-24
2011-04-28
2014-06-23
2016-01-01
2016-08-31
2016-10-01
15:22:37.758
10:34:45
23:44:12
15:00
01:22:37.758
13:22:37.758
2016-09-24T15:22:37.758
2012-10-30T03:50:12
2013-10-12T16:04:23
2016-01-01T00:00
2015-12-31T23:59:59.999999999

所感

イミュータブルにしたのでメソッドチェインできるのでちょっとどの変数にどの結果が入っているかが
わかりやすくなった。
単純な日時の制御なら楽にできると思われる
時差などを制御するものもあるのでそれも近いうちちょっと触ってみる