Java8日期處理

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

import java.time.Year;

import java.time.temporal.ChronoUnit;

/**

* This class demonstrates JAVA 8 data and time API

* @author Siva Prasad Rao Janapati

*

*/

public class DateTimeDemonstration {

/**

* @param args

*/

public static void main(String[] args) {

 //Get year

 Year year = Year.now();

 System.out.println("Year ::" + year);

 //know the year is leap year or not

 System.out.println("Is year[" +year+"] leap year?"+ year.isLeap());

 }

}

 

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

import java.time.LocalDate;

import java.time.Period;

import java.time.temporal.ChronoUnit;

/**

* This class demonstrates JAVA 8 data and time API

* @author Siva Prasad Rao Janapati

*

*/

public class DateTimeDemonstration {

/**

* @param args

*/

public static void main(String[] args) {

 LocalDate localDate = LocalDate.now();

 Period period = Period.between(localDate, localDate.plus(2, ChronoUnit.DAYS));

 System.out.println(period.getDays());

 }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章