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


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

DateTimeFormatter

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

JDK8中增加了一系列時間的類,

(據說)是為了干掉過去的Date,Calendar類的,

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

至於我的個人感受就是用起來實在是很麻煩,我一般封裝成幾個常用的方法以后每次就調方法,再也不想看里面是怎么實現的了.

而發現了LocalDateTime這種新類以后,經過我的簡單的試用,覺得完全可以取代掉之前使用時間的一切方法.非常好用,太好用了.

下面是簡單的使用教程:

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

運行結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM