Java 8中用java.time.LocalDate全面代替老舊的Date,Calendar類

版權聲明: 本文由 一隻博客 發表於 bloghome博客
文章連接: https://www.bloghome.com.cn/user/cnn237111java

用久了C#中的DateTime類型以後,再用回Java中的時間類,真是一種痛苦的事情。算法

Java 8以前,Date類就以其糟糕的設計,被人吐槽,好比最簡單的初始化日期的方法,會出現反直覺的結果,好比ide

Date date = new Date(1980, 12, 25);

它的真實日期是Wed Jan 12 00:00:00 CST 3881這種難以想象結果。固然,它也是有一種算法的,是1900+1980+1致使的,至於爲啥是這個計算式,有興趣的人能夠去翻API手冊,總之對於使用者來講,這個東西爛級了。設計

後來的Calendar依舊爛,甚至爛出了新境界,不屑一提。
後來據說有個Joda-Time,用過感受甚好,後來Java8中借鑑了這個東西,終於實現了一個好用點的時間類。固然比C#仍是差了不少,但至少不那麼反人類。code

下面例舉一些C#中的時間類的經常使用方法,在Java8中的實現方式。orm

C#中有DateTime結構體,Java8中有
java.time.LocalDate 只表示日期,不包含時區信息
java.time.LocalTime 只表示時間,不包含時區信息
java.time.LocalDateTime 同時包含了時間和日期,和C#中DateTime最像的就是這個東西。blog

所以,建議就用LocalDateTime來進行時間類的操做。字符串

Now的表示
        LocalDateTime t1=LocalDateTime.now();

自定義時間
        LocalDateTime t2=LocalDateTime.of(2000,1,1,19,0,0);
        LocalDateTime t3=LocalDateTime.parse("2007-12-03T10:15:30");
        LocalDateTime t4=LocalDateTime.parse("2001-04-23 12:30",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
        LocalDateTime t5=LocalDateTime.parse("2017-01-08 00:00:00",DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

時間的加減
        LocalDateTime t6=t2.plusDays(5).plusHours(3);
        LocalDateTime t7=t2.plusDays(-5).plusHours(-3);

算時間差
        Duration  d1= Duration.between(t6, t7);
        Duration  d2= Duration.between(t7, t6);

時間判等,千萬不要用==
        LocalDateTime t8=LocalDateTime.of(2000,1,1,19,0,0);
        System.out.println(t2.isEqual(t8));

時間判大小   
        System.out.println(t1.isAfter(t2));

轉換成字符串
        System.out.println(t1);
        System.out.println(t1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

嗯,差很少就是這些了,知道了這些用法,常規的應用下足夠使用了。不夠的話,再查API便可。get

相關文章
相關標籤/搜索