最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)顯而易見,就是浪費(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)⒒蛘叱鰠?,如果Joda-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)文章

  • Java實(shí)現(xiàn)注冊(cè)登錄與郵箱發(fā)送賬號(hào)驗(yàn)證激活功能

    Java實(shí)現(xiàn)注冊(cè)登錄與郵箱發(fā)送賬號(hào)驗(yàn)證激活功能

    這篇文章主要介紹了Java實(shí)現(xiàn)注冊(cè)登錄與郵箱發(fā)送賬號(hào)驗(yàn)證激活功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-12-12
  • 淺析Java中局部變量與成員變量同名解決技巧

    淺析Java中局部變量與成員變量同名解決技巧

    在剛開始學(xué)習(xí)Java的時(shí)候,就了解了Java基礎(chǔ)中的變量,雖然知道這個(gè)以后會(huì)經(jīng)常用到,但沒想到了基本語(yǔ)法這里,竟然又冒出來(lái)了成員變量和局部變量。變來(lái)變?nèi)ヌ菀鬃屓烁銜灹耍裉煳覀兙吞魭鰜?lái)梳理一下!
    2016-07-07
  • Java序列化JSON丟失精度問題的解決方法(修復(fù)Long類型太長(zhǎng))

    Java序列化JSON丟失精度問題的解決方法(修復(fù)Long類型太長(zhǎng))

    這篇文章主要給大家介紹了關(guān)于Java序列化JSON丟失精度問題的解決方法,修復(fù)Long類型太長(zhǎng)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • scala+redis實(shí)現(xiàn)分布式鎖的示例代碼

    scala+redis實(shí)現(xiàn)分布式鎖的示例代碼

    這篇文章主要介紹了scala+redis實(shí)現(xiàn)分布式鎖的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • 詳解Java關(guān)于時(shí)間格式化的方法

    詳解Java關(guān)于時(shí)間格式化的方法

    這篇文章主要介紹了詳解Java關(guān)于時(shí)間格式化的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中的Semaphore計(jì)數(shù)信號(hào)量詳細(xì)解析

    Java中的Semaphore計(jì)數(shù)信號(hào)量詳細(xì)解析

    這篇文章主要介紹了Java中的Semaphore計(jì)數(shù)信號(hào)量詳細(xì)解析,Semaphore?是一個(gè)計(jì)數(shù)信號(hào)量,必須由獲取它的線程釋放,常用于限制可以訪問某些資源的線程數(shù)量,例如通過?Semaphore?限流,需要的朋友可以參考下
    2023-11-11
  • spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄

    這篇文章主要為大家介紹了spring-boot項(xiàng)目啟動(dòng)遲緩異常排查解決記錄,突然在本地啟動(dòng)不起來(lái)了,表象特征就是在本地IDEA上運(yùn)行時(shí),進(jìn)程卡住也不退出,應(yīng)用啟動(dòng)時(shí)加載相關(guān)組件的日志也不輸出
    2022-02-02
  • springmvc 分頁(yè)查詢的簡(jiǎn)單實(shí)現(xiàn)示例代碼

    springmvc 分頁(yè)查詢的簡(jiǎn)單實(shí)現(xiàn)示例代碼

    我們?cè)陂_發(fā)項(xiàng)目中很多項(xiàng)目都用到列表分頁(yè)功能,本篇介紹了springmvc 分頁(yè)查詢的簡(jiǎn)單實(shí)現(xiàn)示例代碼,非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2017-01-01
  • 淺談Spring AOP中args()和argNames的含義

    淺談Spring AOP中args()和argNames的含義

    這篇文章主要介紹了Spring AOP中args()和argNames的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • SpringBoot集成ShardingSphere實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表

    SpringBoot集成ShardingSphere實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表

    ShardingSphere?是一個(gè)開源的分布式數(shù)據(jù)庫(kù)中間件,旨在為應(yīng)用提供數(shù)據(jù)庫(kù)分片、讀寫分離、分布式事務(wù)等功能,下面我們來(lái)看看SpringBoot如何集成ShardingSphere實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表吧
    2024-12-12

最新評(píng)論

虹口区| 颍上县| 昭苏县| 武山县| 宁陕县| 含山县| 阳原县| 哈巴河县| 舒城县| 耿马| 大同县| 准格尔旗| 洛南县| 温州市| 保山市| 青神县| 益阳市| 刚察县| 陆河县| 临泉县| 沾化县| 喀喇沁旗| 新丰县| 固阳县| 东乡县| 连平县| 榆中县| 吴堡县| 湄潭县| 望谟县| 清水县| 古浪县| 治多县| 磴口县| 锡林浩特市| 集贤县| 大方县| 独山县| 筠连县| 岳阳市| 基隆市|