最近在项目的业务中有统计模块,统计内容为指定月份每天的数据/指定Year每月的数据,在筛选时候需要指定开始结束时间,还需要计算指定月份有多少天,使用java.util.Calendar进行计算,java.util.Date的很多方法早就Deprecated了,所以使用了Calendar,但是在使用过程中发现编码量较大,考虑到好多架构中使用Joda-Time所以准备对其进行简单调研,但是同时JAVA8中添加的DataTime的新API,所以也进行了简单的调研,个人还是偏向于JDK提供的方法,所以如果真的在项目中引用,可能还是会考虑使用JAVA8提供的API,以下为一些简单的测试代码:
代码包括获取当前时间,格式化,YMDHms的增减,以及java.util.Date/java.util.Calendar/java.time.LocalDateTime之间的转换,不过有点遗憾的是在ORM框架中还暂时无法直接使用新的API,但是可以通过自定义的字段来定义。
Joda-Time简述:
Joda-Time Github:
JAVA8-Docs:
// 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)); }