JDK8日期處理
下面是簡單的使用教程:
1,按照自由格式獲取當前時間
public static String getTodayByFormat(String timeFormat){ return LocalDateTime.now().format(DateTimeFormatter.ofPattern(timeFormat)); }
簡直優雅,甚至我都不想封裝成方法了,想用隨時寫,就是這麼容易.
2,獲取當前年/月/日
一張圖說明,想怎麼取,想怎麼拼,都隨便
3,獲取前一天
public static String getYesterdayByFormat(String timeFormat){ //獲取當前日期 Date date = new Date(); SimpleDateFormat sf = new SimpleDateFormat(timeFormat); //通過秒獲取下一天日期 long time = (date.getTime() / 1000) - 60 * 60 * 24;//秒 date.setTime(time * 1000);//毫秒 String yesterday = sf.format(date).toString(); return yesterday; }
如今有了新方法:
public static String getYesterdayByFormat(String timeFormat){ return LocalDateTime.now().plusDays(1).format(DateTimeFormatter.ofPattern(timeFormat)); }
同理,我都不想爲獲取X天后/X小時後單獨寫方法了,就在下面(以增加爲例):
返回值是LocalDateTime,也就意味着可以一直鏈式點下去,想要多少天以後的數據儘管開口,一句寫不完算我輸.
4,獲取已經度過的毫秒/秒
看看新的LocalDate怎麼用:
// 取當前日期:
LocalDate today = LocalDate.now(); // -> 2014-12-24
// 根據年月日取日期,12月就是12:
LocalDate crischristmas = LocalDate.of(2014, 12, 25); // -> 2014-12-25
// 根據字符串取:
LocalDate endOfFeb = LocalDate.parse("2014-02-28"); // 嚴格按照ISO yyyy-MM-dd驗證,02寫成2都不行,當然也有一個重載方法允許自己定義格式
LocalDate.parse("2014-02-29"); // 無效日期無法通過:DateTimeParseException: Invalid date
日期轉換經常遇到,比如:
// 取本月第1天:
LocalDate firstDayOfThisMonth = today.with(TemporalAdjusters.firstDayOfMonth()); // 2014-12-01
// 取本月第2天:
LocalDate secondDayOfThisMonth = today.withDayOfMonth(2); // 2014-12-02
// 取本月最後一天,再也不用計算是28,29,30還是31:
LocalDate lastDayOfThisMonth = today.with(TemporalAdjusters.lastDayOfMonth()); // 2014-12-31
// 取下一天:
LocalDate firstDayOf2015 = lastDayOfThisMonth.plusDays(1); // 變成了2015-01-01
// 取2015年1月第一個週一,這個計算用Calendar要死掉很多腦細胞:
LocalDate firstMondayOf2015 = LocalDate.parse("2015-01-01").with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY)); // 2015-01-05
==
java8 LocalDate LocalDateTime等時間類用法實例分析_java_腳本之家
http://www.jb51.net/article/110343.htm
本文實例講述了java8 LocalDate LocalDateTime等時間類用法。分享給大家供大家參考,具體如下:
這篇文章主要是java8中新的Date和Time API的實戰。新的Date和Time類是Java開發者社區千呼萬喚始出來的。Java8 之前存在的Date類一直都受人詬病,很多人都會選擇使用第三方的date庫joda-time。Java8中的date和time api是jodatime的作者參與開發的,實現了JSR310的全部內容。這些新的api都在包java.time下。
既然第三方的joda-time,date4j都已經足夠強大了,爲什麼java8還要重新實現他呢,一部分的原因是這些第三方的庫是存在兼容問題的,比如標準的JSF日期轉化器與joda-time api,就不兼容,每次使用都需要編寫自己的轉換器,所以標準化api是必須的,就有了JSR310,java8中就實現了他全部的規定內容。
新Date類和Time類背後的設計原則:
不可變類
java8之前,Date類都是可變類。當我們在多線程環境下使用它,編程人員應該確認Date對象的線程安全。Java8的Date和Time API提供了線程安全的不可變類。編程人員不用考慮併發的問題。
領域模型驅動設計方法
新的日期和時間的類別遵循“域驅動設計”。對於開發者來說,理解方法和類的功能是很容易的。
java.time.LocalDate:
LocalDate只提供日期不提供時間信息。它是不可變類且線程安全的。
java.time.LocalTime:
LocalTime只提供時間而不提供日期信息,它是不可變類且線程安全的。
java.time.LocalDateTime:
LocalDateTime提供時間和日期的信息,它是不可變類且線程安全的
java.time.Year:
Year提供年的信息,它是不可變類且線程安全的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
java.time.Duration:
Duration是用來計算兩個給定的日期之間包含多少秒,多少毫秒,它是不可變類且線程安全的
java.time.Period:
Period是用來計算兩個給定的日期之間包含多少天,多少月或者多少年,它是不可變類且線程安全的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|