最新国产好看的视频,伊人天堂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之前的版本,對日期時(shí)間的處理相當(dāng)麻煩,有些方法設(shè)計(jì)非常反人類。而Joda-Time使用起來不僅方便,而且可讀性強(qiáng)。雖然JDK 8引用了新的時(shí)間處理類,而且參與設(shè)計(jì)的人也正是Joda-Time的作者,但是由于各種原因,很多項(xiàng)目還是使用的JDK7,使用Joda-Time還是一個不錯的選擇。

Joda-Time體驗(yàn)

對比之前JDK的處理方式,使用了Joda-Time之后,代碼整個神清氣爽了很多。接下來就用一些簡單的例子來對比一下JDk和Joda-Time的的使用。

依賴

只需要引用一個包。

<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來進(jìn)行日期的格式化:

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

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

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

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

而Joda-Time中的DateTime本身就有格式化的方法,對象直接調(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ì)算

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

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

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ì)算兩個日期相差的天數(shù),使用JDK是這樣實(shí)現(xiàn)的:

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

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

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

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

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

兼容JDK日期

Joda-Time另一個使用起來非常方便的地方就是與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的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

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

    在剛開始學(xué)習(xí)Java的時(shí)候,就了解了Java基礎(chǔ)中的變量,雖然知道這個以后會經(jīng)常用到,但沒想到了基本語法這里,竟然又冒出來了成員變量和局部變量。變來變?nèi)ヌ菀鬃屓烁銜灹?,今天我們就挑揀出來梳理一下?/div> 2016-07-07
  • Java序列化JSON丟失精度問題的解決方法(修復(fù)Long類型太長)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新評論

张家口市| 普宁市| 南雄市| 从化市| 芷江| 礼泉县| 彭山县| 崇明县| 彭阳县| 曲靖市| 乐昌市| 枣庄市| 曲靖市| 永城市| 中江县| 会东县| 台北县| 东丽区| 霍林郭勒市| 阜南县| 平南县| 横山县| 商城县| 蒙城县| 桑植县| 洪湖市| 宾川县| 灵台县| 扶沟县| 繁昌县| 台东市| 山丹县| 买车| 洪泽县| 淳安县| 临安市| 华容县| 英吉沙县| 安宁市| 新竹县| 紫金县|