<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
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之前的版本,對日期時間的處理相當麻煩,有些方法設計非常反人類。而Joda-Time使用起來不僅方便,而且可讀性強。雖然JDK 8參照了新的時間處理類,而且參與設計的人也正是Joda-Time的作者,但是由於各種原因,很多專案還是使用的JDK7,使用Joda-Time還是一個不錯的選擇。
對比之前JDK的處理方式,使用了Joda-Time之後,程式碼整個神清氣爽了很多。接下來就用一些簡單的例子來對比一下JDk和Joda-Time的的使用。
只需要參照一個包。
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.3</version> </dependency>
JDK的日期是Date:
Date date = new Date();
Joda-Time的日期是DateTime:
DateTime dateTime = new DateTime();
DateTime在建立的時候還可以輕鬆的指定特定的日期和時間:
DateTime dateTime = new DateTime(2016, 10, 01, 00, 00);
JDK使用的是SimpleDateFormat來進行日期的格式化:
Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdf.format(date);
乍看之下用起來也不麻煩,但是SimpleDateFormat是非執行緒安全的。
也就是說,如果在並行環境下,必須對SimpleDateFormat物件做同步處理,比如用synchronized,比如用ThreadLocal;
或者每次都new一個新的SimpleDateFormat物件,缺點顯而易見,就是浪費資源。
而Joda-Time中的DateTime本身就有格式化的方法,物件直接呼叫即可:
DateTime dateTime = new DateTime(); String dateTimeStr = dateTime.toString("yyyy-MM-dd HH:mm:ss");
當然,如果要用轉換器,Joda-Time也提供了DateTimeFormatter:
DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); String dateTimeStr = dtf.print(dateTime);
而且DateTimeFormatter是不可變的,所以是執行緒安全的。
SimpleDateFormat和DateTimeFormatter也都可以將字串轉換成日期:
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);
個人在Joda-Time使用中,最喜歡的是它的日期計算。
比如要得到40天前的日期,在JDK中,計算日期相當複雜,必須藉助日曆Calendar來完成:
Date today = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(today); // 設定日曆 calendar.add(Calendar.DAY_OF_MONTH, -40); // 將日曆往回翻40天 Date beforeDay = calendar.getTime(); // 日曆返回日期
Joda-Time中,日期自帶日期計算功能,非常直觀:
DateTime today = new DateTime(); DateTime beforeDay = today.minusDays(40);
如果要計算兩個日期相差的天數,使用JDK是這樣實現的:
int diffDays = (int) ((today.getTime() - beforeDay.getTime()) / (24*60*60*1000));
Joda-Time提供了相關的方法來處理:
int diffDays = Days.daysBetween(yesterday, today).getDays();
除了天數,月數、年數計算起來都非常方便,比如月數:
int diffMonths = Months.monthsBetween(yesterday, today).getMonths();
Joda-Time另一個使用起來非常方便的地方就是與JDK日期類的互相轉換。
因為很多現成的介面可能是用JDk的日期作為入參或者出參,如果Joda-Time不能相容,那很多方便就不復存在了。
// 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時間處理第三方包Joda Time使用詳解的詳細內容,更多關於Java時間處理Joda Time的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45