java 8 java.time的API

public class TimeIntroduction {
    public static void testClock() throws InterruptedException {
        //時鐘提供給咱們用於訪問某個特定 時區的 瞬時時間、日期 和 時間的。  
        Clock c1 = Clock.systemUTC(); //系統默認UTC時鐘(當前瞬時時間 System.currentTimeMillis())  
        System.out.println(c1.millis()); //每次調用將返回當前瞬時時間(UTC)  
        Clock c2 = Clock.systemDefaultZone(); //系統默認時區時鐘(當前瞬時時間)  
        Clock c31 = Clock.system(ZoneId.of("Europe/Paris")); //巴黎時區  
        System.out.println(c31.millis()); //每次調用將返回當前瞬時時間(UTC)  
        Clock c32 = Clock.system(ZoneId.of("Asia/Shanghai"));//上海時區  
        System.out.println(c32.millis());//每次調用將返回當前瞬時時間(UTC)  
        Clock c4 = Clock.fixed(Instant.now(), ZoneId.of("Asia/Shanghai"));//固定上海時區時鐘  
        System.out.println(c4.millis());
        Thread.sleep(1000);
        System.out.println(c4.millis()); //不變 即時鐘時鐘在那一個點不動  
        Clock c5 = Clock.offset(c1, Duration.ofSeconds(2)); //相對於系統默認時鐘兩秒的時鐘  
        System.out.println(c1.millis());
        System.out.println(c5.millis());
    }
    public static void testInstant() {
        //瞬時時間 至關於之前的System.currentTimeMillis()  
        Instant instant1 = Instant.now();
        System.out.println(instant1.getEpochSecond());//精確到秒 獲得相對於1970-01-01 00:00:00 UTC的一個時間  
        System.out.println(instant1.toEpochMilli()); //精確到毫秒  
        Clock clock1 = Clock.systemUTC(); //獲取系統UTC默認時鐘  
        Instant instant2 = Instant.now(clock1);//獲得時鐘的瞬時時間  
        System.out.println(instant2.toEpochMilli());
        Clock clock2 = Clock.fixed(instant1, ZoneId.systemDefault()); //固定瞬時時間時鐘  
        Instant instant3 = Instant.now(clock2);//獲得時鐘的瞬時時間  
        System.out.println(instant3.toEpochMilli());//equals instant1  
    }
    public static void testLocalDateTime() {
        //使用默認時區時鐘瞬時時間建立 Clock.systemDefaultZone() -->即相對於 ZoneId.systemDefault()默認時區  
        LocalDateTime now = LocalDateTime.now();
        System.out.println(now);
        //自定義時區  
        LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println(now2);//會以相應的時區顯示日期  
        //自定義時鐘  
        Clock clock = Clock.system(ZoneId.of("Asia/Dhaka"));
        LocalDateTime now3 = LocalDateTime.now(clock);
        System.out.println(now3);//會以相應的時區顯示日期  
       //不須要寫什麼相對時間 如java.util.Date 年是相對於1900 月是從0開始  
        //2013-12-31 23:59  
        LocalDateTime d1 = LocalDateTime.of(2013, 12, 31, 23, 59);
        //年月日 時分秒 納秒  
        LocalDateTime d2 = LocalDateTime.of(2013, 12, 31, 23, 59, 59, 11);
        //使用瞬時時間 + 時區  
        Instant instant = Instant.now();
        LocalDateTime d3 = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());
        System.out.println(d3);
        //解析String--->LocalDateTime  
        LocalDateTime d4 = LocalDateTime.parse("2013-12-31T23:59");
        System.out.println(d4);
        LocalDateTime d5 = LocalDateTime.parse("2013-12-31T23:59:59.999");//999毫秒 等價於999000000納秒  
        System.out.println(d5);
        //使用DateTimeFormatter API 解析 和 格式化  
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
        LocalDateTime d6 = LocalDateTime.parse("2013/12/31 23:59:59", formatter);
        System.out.println(formatter.format(d6));
        //時間獲取  
        System.out.println(d6.getYear());
        System.out.println(d6.getMonth());
        System.out.println(d6.getDayOfYear());
        System.out.println(d6.getDayOfMonth());
        System.out.println(d6.getDayOfWeek());
        System.out.println(d6.getHour());
        System.out.println(d6.getMinute());
        System.out.println(d6.getSecond());
        System.out.println(d6.getNano());
        //時間增減  
        LocalDateTime d7 = d6.minusDays(1);
        LocalDateTime d8 = d7.plus(1, IsoFields.QUARTER_YEARS);
       //LocalDate 即年月日 無時分秒  
       //LocalTime即時分秒 無年月日  
       //API和LocalDateTime相似就不演示了  
    }
    public static void testZonedDateTime() {
        //即帶有時區的date-time 存儲納秒、時區和時差(避免與本地date-time歧義)。  
        //API和LocalDateTime相似,只是多了時差(如2013-12-20T10:35:50.711+08:00[Asia/Shanghai])  
        ZonedDateTime now = ZonedDateTime.now();
        System.out.println(now);
        ZonedDateTime now2 = ZonedDateTime.now(ZoneId.of("Europe/Paris"));
        System.out.println(now2);
        //其餘的用法也是相似的 就不介紹了  
        ZonedDateTime z1 = ZonedDateTime.parse("2013-12-31T23:59:59Z[Europe/Paris]");
        System.out.println(z1);
    }
    public static void testDuration() {
        //表示兩個瞬時時間的時間段  
        Duration d1 = Duration.between(Instant.ofEpochMilli(System.currentTimeMillis() - 12323123), 
        Instant.now());
        //獲得相應的時差  
        System.out.println(d1.toDays());
        System.out.println(d1.toHours());
        System.out.println(d1.toMinutes());
        System.out.println(d1.toMillis());
        System.out.println(d1.toNanos());
       //1天時差 相似的還有如ofHours()  
        Duration d2 = Duration.ofDays(1);
        System.out.println(d2.toDays());
    }
    public static void testChronology() {
        //提供對java.util.Calendar的替換,提供對年曆系統的支持  
        Chronology c = HijrahChronology.INSTANCE;
        ChronoLocalDateTime d = c.localDateTime(LocalDateTime.now());
        System.out.println(d);
    }
    /**
     * 新舊日期轉換
     */
    public static void testNewOldDateConversion(){
        Instant instant=new Date().toInstant();
        Date date=Date.from(instant);
        System.out.println(instant);
        System.out.println(date);
    }
    public static void main(String[] args) throws InterruptedException {
        testClock();
        testInstant();
        testLocalDateTime();
        testZonedDateTime();
        testDuration();
        testChronology();
        testNewOldDateConversion();
    }
}
相關文章
相關標籤/搜索