欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java時(shí)間處理第三方包Joda?Time使用詳解

 更新時(shí)間:2022年07月15日 14:51:08   作者:風(fēng)鳶  
這篇文章主要為大家介紹了Java時(shí)間處理第三方包Joda?Time使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

Joda-Time provides a quality replacement for the Java date and time classes.
Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310).

JDK在8之前的版本,對(duì)日期時(shí)間的處理相當(dāng)麻煩,有些方法設(shè)計(jì)非常反人類。而Joda-Time使用起來(lái)不僅方便,而且可讀性強(qiáng)。雖然JDK 8引用了新的時(shí)間處理類,而且參與設(shè)計(jì)的人也正是Joda-Time的作者,但是由于各種原因,很多項(xiàng)目還是使用的JDK7,使用Joda-Time還是一個(gè)不錯(cuò)的選擇。

Joda-Time體驗(yàn)

對(duì)比之前JDK的處理方式,使用了Joda-Time之后,代碼整個(gè)神清氣爽了很多。接下來(lái)就用一些簡(jiǎn)單的例子來(lái)對(duì)比一下JDk和Joda-Time的的使用。

依賴

只需要引用一個(gè)包。

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.3</version>
</dependency>

創(chuàng)建日期

JDK的日期是Date:

Date date = new Date();

Joda-Time的日期是DateTime:

DateTime dateTime = new DateTime();

DateTime在創(chuàng)建的時(shí)候還可以輕松的指定特定的日期和時(shí)間:

DateTime dateTime = new DateTime(2016, 10, 01, 00, 00);

日期格式化

JDK使用的是SimpleDateFormat來(lái)進(jìn)行日期的格式化:

Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);

乍看之下用起來(lái)也不麻煩,但是SimpleDateFormat是非線程安全的。

也就是說(shuō),如果在并發(fā)環(huán)境下,必須對(duì)SimpleDateFormat對(duì)象做同步處理,比如用synchronized,比如用ThreadLocal;

或者每次都new一個(gè)新的SimpleDateFormat對(duì)象,缺點(diǎn)顯而易見(jiàn),就是浪費(fèi)資源。

而Joda-Time中的DateTime本身就有格式化的方法,對(duì)象直接調(diào)用即可:

DateTime dateTime = new DateTime();
String dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss");

當(dāng)然,如果要用轉(zhuǎn)換器,Joda-Time也提供了DateTimeFormatter:

DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr = dtf.print(dateTime);

而且DateTimeFormatter是不可變的,所以是線程安全的。

SimpleDateFormat和DateTimeFormatter也都可以將字符串轉(zhuǎn)換成日期:

String dateStr = "2016-09-22";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
    Date date = sdf.parse(dateStr);
    } catch (ParseException e) {
        e.printStackTrace();
    }
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd");
DateTime dateTime = dtf.parseDateTime(dateStr);

日期計(jì)算

個(gè)人在Joda-Time使用中,最喜歡的是它的日期計(jì)算。

比如要得到40天前的日期,在JDK中,計(jì)算日期相當(dāng)復(fù)雜,必須借助日歷Calendar來(lái)完成:

Date today = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(today); // 設(shè)置日歷
calendar.add(Calendar.DAY_OF_MONTH, -40); // 將日歷往回翻40天
Date beforeDay = calendar.getTime(); // 日歷返回日期

Joda-Time中,日期自帶日期計(jì)算功能,非常直觀:

DateTime today = new DateTime();
DateTime beforeDay = today.minusDays(40);

如果要計(jì)算兩個(gè)日期相差的天數(shù),使用JDK是這樣實(shí)現(xiàn)的:

int diffDays = (int) ((today.getTime() - beforeDay.getTime()) / (24*60*60*1000));

Joda-Time提供了相關(guān)的方法來(lái)處理:

int diffDays = Days.daysBetween(yesterday, today).getDays();

除了天數(shù),月數(shù)、年數(shù)計(jì)算起來(lái)都非常方便,比如月數(shù):

int diffMonths = Months.monthsBetween(yesterday, today).getMonths();

兼容JDK日期

Joda-Time另一個(gè)使用起來(lái)非常方便的地方就是與JDK日期類的互相轉(zhuǎn)換。

因?yàn)楹芏喱F(xiàn)成的接口可能是用JDk的日期作為入?yún)⒒蛘叱鰠ⅲ绻鸍oda-Time不能兼容,那很多方便就不復(fù)存在了。

// Date to DateTime
Date date = new Date();
DateTime dateTime = new DateTime(date);
// DateTime to Date
Date date2 = dateTime.toDate();
// Calendar to DateTime
Calendar calender = Calendar.getInstance();
DateTime dateTime2 =  new DateTime(calender);
// DateTime to Calendar
Calendar calendar2 = dateTime.toCalendar(Locale.CHINA);

以上就是Java時(shí)間處理第三方包Joda Time使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Java時(shí)間處理Joda Time的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • idea編寫java程序詳細(xì)圖文步驟

    idea編寫java程序詳細(xì)圖文步驟

    這篇文章主要給大家介紹了關(guān)于idea編寫java程序的詳細(xì)圖文步驟,IDEA是用于Java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,它是業(yè)界公認(rèn)的目前用于Java程序開(kāi)發(fā)最好的工具,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-09-09
  • java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng)

    java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java Gui實(shí)現(xiàn)肯德基點(diǎn)餐收銀系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java基礎(chǔ)入門 Swing中間容器的使用

    Java基礎(chǔ)入門 Swing中間容器的使用

    這篇文章主要介紹了Java基礎(chǔ)入門 Swing中間容器的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • FastJSON的0day漏洞的解決

    FastJSON的0day漏洞的解決

    本文主要介紹了FastJSON的0day漏洞的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • SpringBoot統(tǒng)一功能處理示例詳解(攔截器)

    SpringBoot統(tǒng)一功能處理示例詳解(攔截器)

    這篇文章主要介紹了SpringBoot統(tǒng)一功能處理(攔截器),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-08-08
  • 基于IntelliJ IDEA的類注釋和方法注釋操作

    基于IntelliJ IDEA的類注釋和方法注釋操作

    這篇文章主要介紹了基于IntelliJ IDEA的類注釋和方法注釋操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • java.util.Collections類—emptyList()方法的使用

    java.util.Collections類—emptyList()方法的使用

    這篇文章主要介紹了java.util.Collections類—emptyList()方法的使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java多線程之線程安全問(wèn)題詳細(xì)解析

    Java多線程之線程安全問(wèn)題詳細(xì)解析

    這篇文章主要給大家介紹了關(guān)于Java多線程之線程安全問(wèn)題的相關(guān)資料,Java多線程中線程安全問(wèn)題是一個(gè)常見(jiàn)的問(wèn)題,因?yàn)槎鄠€(gè)線程可能同時(shí)訪問(wèn)共享的資源,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • SpringBoot項(xiàng)目開(kāi)發(fā)中常用的依賴

    SpringBoot項(xiàng)目開(kāi)發(fā)中常用的依賴

    這篇文章主要介紹了SpringBoot項(xiàng)目開(kāi)發(fā)中常用的依賴詳解,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • JAVA中的deflate壓縮實(shí)現(xiàn)方法

    JAVA中的deflate壓縮實(shí)現(xiàn)方法

    下面小編就為大家?guī)?lái)一篇JAVA中的deflate壓縮實(shí)現(xiàn)方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-09-09

最新評(píng)論