JAVA 8 新時間 API java.time 使用簡介

JAVA 8 引入新時間API原因是原來的Date類無法支持多線程操作,新時間API支持多線程操作,當java.time包內時間類其值發生改變時,其如同String類,類的實例是不可變的對象,當改變其值的時候就會新生成對象地址,從而改變其對象地址,以保證支持多線程操作。

新的java.time包內類默認均採用ISO-8601時區標準

<給計算機看的時間>
Instant 時間戳 在時間線上的瞬間點 在ISO- 2007-12-03T10:15:30
-> 2007-12-03T10:15:30 .000Z。
<自己使用的日期時間>
LocalDate 在ISO- 2007-12-03 -> 2007-12-03 。
LocalDateTime 在ISO- 2007-12-03T10:15:30 -> 2007-12-03T10:15:30 。
LocalTime 在ISO- 10:15:30 -> 10:15:30 。

Duration 和Period
Duration:用於計算兩個“時間”間隔
Period:用於計算兩個“日期”間隔

package java8.time;

import java.time.Duration;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.Set;

import org.junit.Test;

public class Demo {
    /**
     * 計算時間差
     */
    @Test
    public void test1() {
        Instant time1 = Instant.now(); // 獲取系統當前
        System.out.println(time1);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        Instant time2 = Instant.now();// 獲取休眠後系統時間
        Duration duration = Duration.between(time1, time2);
        // 計算兩個時間的差值
        System.out.println(duration.toMillis());
    }

    @Test
    public void test2() {
        LocalDateTime time1 = LocalDateTime.now();
        System.out.println(time1);
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        LocalDateTime time2 = LocalDateTime.now();
        Duration duration = Duration.between(time1, time2);
        System.out.println(duration.toMillis());
    }

    /*
     * 計算兩日期相差時間
     */
    @Test
    public void test3() {
        LocalDate date1 = LocalDate.now();
        LocalDate date2 = date1.plusDays(5);
        Period period = Period.between(date1, date2);
        System.out.println(period.getDays());
    }

    /*
     * 輸入指定日期 按照指定日期格式輸出 默認採用ISO-8601日曆系統
     */
    @Test
    public void test4() {
        LocalDateTime time = LocalDateTime.of(1997, 06, 13, 12, 59, 0);
        time = time.plusMinutes(1);
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd : hh:mm:ss");
        String formatTime = formatter.format(time);
        System.out.println(formatTime);
    }

    /*
     * 修改默認日期格式
     */
    @Test
    public void test5() {
        // 獲取所有日期格式
        Set<String> set = ZoneId.getAvailableZoneIds();
        // 獲取所有亞洲國家時區
        set.stream().filter(e -> e.startsWith("Asia")).forEach(System.out::println);
        LocalDateTime time = LocalDateTime.now(ZoneId.of("Asia/Hong_Kong"));
        // format 第二個參數 指定國家
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd : hh:mm:ss", Locale.CHINA);
        System.out.println(formatter.format(time));
        System.out.println(time);
    }
}
發佈了39 篇原創文章 · 獲贊 35 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章