java8-日付和timeAPI

なぜ我々はjava.timeAPIを学ばなければなりません

  1. オリジナルの日付とカレンダーのクラスのAPIは、アプリケーションが非常に柔軟ではない、理解することは、より複雑で困難です。
  2. カレンダーは、スレッドセーフクラスはSimpleDateFormatのスレッドセーフを引き起こす可能性があります。
  3. java.timeはJSR 310:です。日付と時刻のAPI仕様は、そのクラスであるスレッドセーフなクラスまたは列挙型のすべてを開発しました
  4. APIのjava.time簡単な使用、計算時間が柔軟な、正確な時間がかかることがあります。

二LOCALDATE

LOCALDATE日、java.timeで日付と時刻を分離し、組み合わせることができます。

2.1日付の道を作成します

 // 创建date的方式
    @Test
    public void LocalDateTest(){
        // 1当前日期 常用
        LocalDate now = LocalDate.now();
        System.out.println(now);//2019-10-27
        // 2指定年月 日 方式 常用
        LocalDate ofDate = LocalDate.of(2018, 8, 8);
        System.out.println(ofDate);//2018-08-08
        // 3使用Clock方式创建 不常用
        Clock clock = Clock.systemDefaultZone();
        LocalDate date = LocalDate.now(clock);
        System.out.println(date);// 2019-10-27
        // 4 指定年份 和 一年的天数进行创建
        LocalDate localDate = LocalDate.ofYearDay(2018, 256);
        System.out.println(localDate);// 2018-09-13
        
    }

2.2 LOCALDATE日付を読みます

 @Test
    public void LocalDateTest2(){
        // 创建时间
        LocalDate date = LocalDate.of(2019,10,27);
        // 获得年份 2019
        date.getYear();
        System.out.println(date.getYear());
        // 获得一个月中的第几天 27
        date.getDayOfMonth();
        System.out.println(date.getDayOfMonth());
        // 获得星期 SUNDAY
        date.getDayOfWeek();
        System.out.println(date.getDayOfWeek());
        // 获得一年中的第几天 300
        date.getDayOfYear();
        System.out.println(date.getDayOfYear());
        // 获得月份值 10
        date.getMonthValue();
        System.out.println(date.getMonthValue());
        // 获得月份长度 31
        date.lengthOfMonth();
        System.out.println(date.lengthOfMonth());
        // 是否是闰年 false
        date.isLeapYear();
        System.out.println(date.isLeapYear());

    }

2.3 TemporalField値はLOCALDATEを読みます

ChronoFieldがTemporalFieldは、そのインターフェイスを列挙達成され、2.2に加えて、我々はまた、ChronoFieldを使用することができ、日付が日付を読み込む読み込みます。

    // 使用 TemporalField 读取 LocalDate 的值
    @Test
    public void LocalDateTest3() {
        // 创建时间
        LocalDate date = LocalDate.of(2019, 10, 27);
        // 获得年份 2019
        date.get(ChronoField.YEAR);
        System.out.println(date.get(ChronoField.YEAR));
        // 获得月份 10
        date.get(ChronoField.MONTH_OF_YEAR);
        System.out.println(date.get(ChronoField.MONTH_OF_YEAR));
        // 获得这个月中的第几天 27
        date.get(ChronoField.DAY_OF_MONTH);
        System.out.println(date.get(ChronoField.DAY_OF_MONTH));
        // 获得这个星期的第几天 7
        date.get(ChronoField.DAY_OF_WEEK);
        System.out.println(date.get(ChronoField.DAY_OF_WEEK));
        // 其他不再举例自行研究都是字面意思很好理解

    }

2.4解析LOCALDATE

   @Test
    public void LocalDateParse(){
        // 默认支持格式解析
        String dateStr = "2019-10-27";
        LocalDate parse = LocalDate.parse(dateStr);
        System.out.println(parse);//2019-10-27
        // 指定格式解析
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
        LocalDate date = LocalDate.parse("2019/10/27", dateTimeFormatter);
        System.out.println(date);//2019-10-27
    }

2.5期間の日付を使用して操作

でも、日付を取得するとの違いは、あなたが年、月、日、およびその上の非ゼロかどうかを判断するために取得することができます。

    @Test
    public void LocalDatePor(){
        LocalDate date1 = LocalDate.of(2019, 10, 27);
        LocalDate date2 = LocalDate.of(2019, 10, 25);
        Period between = Period.between(date2, date1);
        System.out.println(between.getDays());// 2
    }

2.6変更日

withAttributeの変更が元の日付を変更しないことで、元の日付の新しいLOCALDATEコピーの基礎を形成します。

    // 修改
    @Test
    public void LocalDateWith(){
        LocalDate date1 = LocalDate.of(2019, 10, 27);
        LocalDate date2 = date1.withMonth(9);//2019-09-27
        System.out.println(date2);
        LocalDate date3 = date2.withYear(2018);//2018-09-27
        System.out.println(date3);
        // 2019-10-27
        System.out.println(date1);
    }

2.7 TemporalAdjusterの変更日

TemporalAdjuster時間装具修正時間も、私たちの日常の開発ニーズを満たすために、静的なファクトリメソッドを多数提供し、そのAPIがより豊富で、withAttributeに比べて、新しいLOCALDATEのコピーを生成します、元の日付を変更しません。

    //  TemporalAdjuster youku1327
    @Test
    public void LocalDateTemporalAdjuster(){
        LocalDate date1 = LocalDate.of(2019, 10, 27);
        LocalDate date2 = date1.with(TemporalAdjusters.firstDayOfMonth());
        // 2019-10-01
        System.out.println(date2);
        LocalDate date3 = date1.with(TemporalAdjusters.firstDayOfYear());
        // 2019-01-01
        System.out.println(date3);
        LocalDate date4 = date1.with(TemporalAdjusters.lastDayOfYear());
        // 2019-12-31
        System.out.println(date4);

    }

三にLocalTime

あなたはLOCALDATE上記の基本的な使い方をマスターしている場合には、学習にLocalTimeは、ほぼすべてのAPI LOCALDATEにLocalTimeと理由は同じ、非常に簡単です。

3.1の作成にLocalTime

    @Test
    public void localTimeTest1(){
        // 1当前时间
        LocalTime now = LocalTime.now();
        System.out.println(now);//22:49:03.360
        // 2指定时间
        LocalTime of = LocalTime.of(22, 47);
        System.out.println(of);//22:47

    }

3.2読書の時間

@Test
    public void localTimeRead(){
        // 1指定时间
        LocalTime tiem = LocalTime.of(22, 50);
        // 小时
        int hour = tiem.getHour();
        // 分钟
        int minute = tiem.getMinute();
        // 秒
        int second = tiem.getSecond();
        // 纳秒
        int nano = tiem.getNano();
        
    }

3.3時間分解

 // 解析时间
    @Test
    public void localTimeParse(){
        // 默认支持格式解析
        LocalTime parse = LocalTime.parse("22:50:00");
        System.out.println(parse);// 22:50
        // 指定格式解析
        LocalTime time = LocalTime.parse("22:50:00", DateTimeFormatter.ISO_TIME);
        System.out.println(time);// 22:50

    }

3.4の変更時

    //
    @Test
    public void localTime(){
        // 1时间
        LocalTime time = LocalTime.of(22, 50);
        LocalTime time1 = time.withHour(2);//02:50
        System.out.println(time1);
        LocalTime time2 = time.withMinute(10);//22:10
        System.out.println(time2);
    }

3.5使用時間の時間差を取得します

  @Test
    public void localTime(){
        LocalTime time1 = LocalTime.of(22, 50,20,20);
        LocalTime time2 = LocalTime.of(23, 10);
        // 差值
        Duration duration = Duration.between(time1, time2);
        long seconds = duration.getSeconds();
        int nano = duration.getNano();
        System.out.println(seconds);//1179
        System.out.println(nano);//999999980

    }

四LOCALDATEとにLocalTime相互合併及び転換

互いにLOCALDATEと変換することができるにLocalTimeのLocalDateTime、LocalDateTimeをLOCALDATEやlocaltimeに組み込むことができます。
LocalTime、同様のLOCALDATEとのLocalDateTime他のAPIは、時間でそれらを繰り返しません。

    // youku1327 谢谢 lsc 
    @Test
    public void LocalDateTimeTest(){
        LocalDate date = LocalDate.of(2019, 10, 27);
        LocalTime time = LocalTime.of(23, 20, 00);
        // 合并为 LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.of(date, time);
        System.out.println(localDateTime);//2019-10-27T23:20
        // 转为LocalDate
        LocalDate localDate = localDateTime.toLocalDate();
        System.out.println(localDate);//2019-10-27
        // 转为 LocalTime
        LocalTime localTime = localDateTime.toLocalTime();
        System.out.println(localTime);// 23:20
    }

ファイブするzoneid

java.time.ZoneIdでjava8は古いのjava.util.TimeZoneを置き換えます。

5.1タイムゾーンオフセット

デフォルト値は現在のタイムゾーンと固定オフセットUTC /グリニッジです

    @Test
    public void TimeZoneId(){
        // 上海
        ZoneId shanghai = ZoneId.of("Asia/Shanghai");
        LocalDate date = LocalDate.of(2019, 10, 27);
        // 设置时区
        ZonedDateTime zonedDateTime = date.atStartOfDay(shanghai);
        // 获得偏移
        ZoneOffset offset = zonedDateTime.getOffset();
        System.out.println(offset);//+08:00
    }

5.2タイムゾーン转するzoneid

    @Test
    public void TimeZoneId2(){
        ZoneId zoneId = TimeZone.getDefault().toZoneId();
        String id = zoneId.getId();
        System.out.println(id);//Asia/Shanghai
    }

5.3計算時間

    @Test
    public void TimeZoneId3(){
        ZoneId zoneId = ZoneId.of("America/Chicago");
        Instant instant = Instant.now();
        // 上海时间 2019-10-27T23:51:27.168
        System.out.println(LocalDateTime.ofInstant(instant,ZoneId.of("Asia/Shanghai")));
        ZonedDateTime zonedDateTime = instant.atZone(zoneId);
        ZoneOffset offset = zonedDateTime.getOffset();
        // 美国芝加哥离上海时区差值 -05:00
        System.out.println(offset);
        LocalDateTime localDateTime = zonedDateTime.toLocalDateTime();
        // 芝加哥时间
        System.out.println(localDateTime);//2019-10-27T10:51:27.168
    }

ここに画像を挿入説明

おすすめ

転載: www.cnblogs.com/zszxz/p/12066917.html