Java 線程安全LocalTime 和LocaldateTime 新的Date和Time類 -JDK8新時間類的簡單使用

不可變類且線程安全 LocalDate 、java.time.LocalTime 和LocaldateTime  新的Date和Time類html

DateTimeFormatter

==https://www.cnblogs.com/blog5277/p/6407463.htmljava

JDK8中增長了一系列時間的類,編程

(聽說)是爲了幹掉過去的Date,Calendar類的,api

過去的Date類(聽說)有着線程不安全等諸多弊端,安全

至於個人我的感覺就是用起來實在是很麻煩,我通常封裝成幾個經常使用的方法之後每次就調方法,不再想看裏面是怎麼實現的了.多線程

而發現了LocalDateTime這種新類之後,通過個人簡單的試用,以爲徹底能夠取代掉以前使用時間的一切方法.很是好用,太好用了.併發

下面是簡單的使用教程:spa

1,按照自由格式獲取當前時間.net

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());
 }
}

運行結果:

相關文章
相關標籤/搜索