版權聲明: 本文由 一隻博客 發表於 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