最近在項目的業務中有統計模塊,統計內容爲指定月份天天的數據/指定Year每個月的數據,在篩選時候須要指定開始結束時間,還須要計算指定月份有多少天,使用java.util.Calendar進行計算,java.util.Date的不少方法早就Deprecated了,因此使用了Calendar,可是在使用過程當中發現編碼量較大,考慮到好多架構中使用Joda-Time因此準備對其進行簡單調研,可是同時JAVA8中添加的DataTime的新API,因此也進行了簡單的調研,我的仍是偏向於JDK提供的方法,因此若是真的在項目中引用,可能仍是會考慮使用JAVA8提供的API,如下爲一些簡單的測試代碼:html
代碼包括獲取當前時間,格式化,YMDHms的增減,以及java.util.Date/java.util.Calendar/java.time.LocalDateTime之間的轉換,不過有點遺憾的是在ORM框架中還暫時沒法直接使用新的API,可是能夠經過自定義的字段來定義。
java
Joda-Time簡述:Joda-Time簡介git
Joda-Time Github:Joda-Time Github
github
JAVA8-Docs:JAVA8 Docs
api
// basic getter @Test public void localDateTime() { LocalDateTime ldt = LocalDateTime.now(); log.info(ldt.getMonthValue() + ""); log.info(ldt.getDayOfYear() + ""); log.info(ldt.getDayOfWeek().getValue() + ""); } // basic use @Test public void localDateTimeFmt() { // get instance of now LocalDateTime ldt = LocalDateTime.now(); // get instance by specified field // LocalDateTime java.time.LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond) ldt = LocalDateTime.of(1991, 2, 11, 5, 11, 5, 11); // format date with standart pattern log.info(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(ldt)); // format date whih specified pattern log.info(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(ldt)); // get month value log.info(ldt.getMonthValue() + ""); // get DayOfYear value log.info(ldt.getDayOfYear() + ""); // get DayOfWeek value log.info(ldt.getDayOfWeek().getValue() + ""); // get MaxOfMonth log.info(ldt.range(ChronoField.DAY_OF_MONTH).getMaximum() + ""); // adjust time with TemporalAdjusters log.info(TemporalAdjusters.lastDayOfMonth().adjustInto(ldt).toString()); } // transfer LocalDateTime to java.util.Date @Test public void transferDate2LocalDateTime() { Date date = new Date(); LocalDateTime ldt = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); log.info(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(ldt)); } // transfer LocalDateTime to java.util.Date @Test public void transferLocalDateTime2Date() { LocalDateTime ldt = LocalDateTime.now(); Date date = Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); log.info(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date)); } // LocalDateTime from Calendar @Test public void calendar() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, 1991); calendar.set(Calendar.MONTH, Calendar.MAY); calendar.set(Calendar.DAY_OF_MONTH, 11); LocalDateTime ldt =LocalDateTime.ofInstant(calendar.toInstant(), ZoneId.systemDefault()); log.info(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(ldt)); }