樂字節-Java8新特性之Date API

上一篇文章,小樂給你們帶來了Java8新特性之Optional,接下來本文將會給你們介紹Java8新特性之Date APIjava

前言:

Java 8經過發佈新的Date-Time API來進一步增強對日期與時間的處理。 舊版的 Java 中,日期時間 API 存在諸多問題 :sql

  • 非線程安全 − java.util.Date 是非線程安全的,全部的日期類都是可變的,
  • 設計不好 − Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text包中定義。
  • 時區處理麻煩 − 日期類並不提供國際化,沒有時區支持

Java 8 在 java.time 包下提供了不少新的 API。如下爲兩個比較重要的 API:segmentfault

  • Local(本地) : 簡化了日期時間的處理,沒有時區的問題。
  • Zoned(時區) − 經過制定的時區處理日期時間。

新的java.time包涵蓋了全部處理日期,時間,日期/時間,時區,時刻(instants),過程(during)與時鐘(clock)的操做。安全

一、LocalDateTime

圖片描述

LocalDateTime ldt = LocalDateTime.now();
// 獲取系統當前時間
System.out.println(ldt);
LocalDateTime ldt2 = LocalDateTime.of(2019, 01, 01, 12, 12, 12, 888000000);
// 構建LocalDateTime對象ldt
System.out.println(ldt2);
// 獲取明年此時的時間
LocalDateTime ldt3 = ldt.plusYears(1);
System.out.println(ldt3);
// 獲取去年此刻時間
LocalDateTime ldt4 = ldt.minusYears(1);
System.out.println(ldt4);
// 獲取年
System.out.println(ldt.getYear());
// 獲取月份
System.out.println(ldt.getMonthValue());
// 獲取本月第某天
System.out.println(ldt.getDayOfMonth());
// 獲取時
System.out.println(ldt.getHour());
// 獲取分
System.out.println(ldt.getMinute());
// 獲取秒
System.out.println(ldt.getSecond());
// 獲取納秒
System.out.println(ldt.getNano());

二、時間戳

時間戳:以Unix元年:1970年1月1日 00:00:00 至目前時間之間的毫秒值 

public static void testInstant(){
    // 時間戳 Instant
    Instant ins1 = Instant.now();
    // 默認獲取UTC時間,協調世界時
    System.out.println(ins1);
    OffsetDateTime odt = ins1.atOffset(ZoneOffset.ofHours(8));
    System.out.println(odt);
    System.out.println(ins1.toEpochMilli());
    Instant ins2 = Instant.ofEpochSecond(60);
    System.out.println(ins2);
}

三、日期時間間隔計算:Duration、Period

public static void testDuration(String[] args) {
        Instant ins1 = Instant.now();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Instant ins2 = Instant.now();
        Duration dura = Duration.between(ins1, ins2);
        System.out.println(dura.toMillis());
        System.out.println("----------------------");
        LocalTime lt1 = LocalTime.now();
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LocalTime lt2 = LocalTime.now();
        Duration dura2 = Duration.between(lt1, lt2);
        System.out.println(dura2.toMillis());
    }

    public  static void testPeriod(){
        LocalDate ld1 = LocalDate.of(2015, 2, 2);
        LocalDate ld2 = LocalDate.now();
        Period period = Period.between(ld1, ld2);
        System.out.println(period);
        System.out.println("相差" + period.getYears() + "年"
                + period.getMonths() + "月"
                + period.getDays() + "天");

    }

四、時間校訂:TemporalAdjuster

public  static  void testTemporalAdjuster(){
    LocalDateTime ldt = LocalDateTime.now();
    System.out.println(ldt);
    LocalDateTime ldt2 = ldt.withDayOfMonth(10);
    System.out.println(ldt2);
    LocalDateTime ldt3 = ldt.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
    System.out.println(ldt3);
}

五、日期時間格式化

public  static  void testDateFormate(){
        DateTimeFormatter dtf = DateTimeFormatter.ISO_DATE;
        LocalDateTime ldt = LocalDateTime.now();
        String strDate = ldt.format(dtf);
        System.out.println(strDate);
        System.out.println("----------------------------");
        DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
        String strDate2 = dtf2.format(ldt);
        System.out.println(strDate2);
        System.out.println("-----------------------------");
        LocalDateTime newDate = ldt.parse(strDate2, dtf2);
        System.out.println(newDate);
    }

六、TimeZone 時區處理

// 時區的處理
    public  static  void testTimeZone(){
        LocalDateTime ldt = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
        System.out.println(ldt);
        LocalDateTime ldt2 = LocalDateTime.now(ZoneId.of("Europe/Dublin"));
        ZonedDateTime zdt = ldt2.atZone(ZoneId.of("Europe/Dublin"));
        System.out.println(zdt);
    }

此次就分享到這裏了,後面小樂會繼續給你們介紹Java8新特性的,請你們繼續多多關注哦!樂字節只講Java技術乾貨。spa

相關文章
相關標籤/搜索