1、Joda Time出现的背景
JDK1.8之前 只支持java.util.Datel、java.util.Calendar
问题:Calendar类操作繁琐 如:月份从0开始计算。
DateFormat线程不安全,两个线程同时使用formatter解析日期,无法预期结果
JDK1.8后 重写日期库,引入Java.time包,大量借鉴Joda-time
2、Joda Time项目
pom依赖:
// JODA TIME compile'joda-time:joda-time:2.9.9'
使用:
创建日期:
// 获取当前日期 DateTime nowDate = new DateTime(); //2018-11-29T13:51:45.602+08:00 /*******DateTime 转成Date、String********/ Date date = nowDate.toDate(); //Thu Nov 29 13:52:46 CST 2018 String dateStr = nowDate.toString("yyyy-MM-dd HH:mm:ss"); //2018-11-29 13:54:11 /*******String 转成Date********/ Date strDate = DateTime.parse("2018-11-29 13:54:11",DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss")).toDate(); //Thu Nov 29 13:54:11 CST 2018 /*******Date 转成Str********/ String dateStr1 = new DateTime(new Date()).toString("yyyy-MM-dd HH:mm:ss"); //2018-11-29 14:05:15 /******* 日期计算 ********/ DateTime minusDays = nowDate.minusDays(1); //昨天 2018-11-28T14:13:13.087+08:00 DateTime plusDays = nowDate.plusDays(1); //明天 2018-11-30T14:12:40.398+08:00 DateTime minusMonths = nowDate.minusMonths(1); //一月前 2018-10-29T14:12:14.446+08:00 DateTime plusMonths = nowDate.plusMonths(1); //一月后 2018-12-29T14:29:51.924+08:00 /******* 计算区间天数 ********/ DateTime begin = new DateTime("2018-11-10"); DateTime end = new DateTime("2018-11-20"); Period p = new Period(begin, end, PeriodType.days()); int days = p.getDays(); // 10 /******* 计算区间天数 ********/ Interval i = new Interval(begin, end); boolean contained = i.contains(new DateTime("2018-11-15")); // true /******* 日期比较 ********/ boolean after = begin.isAfter(end); // false boolean before = begin.isBefore(end); // true boolean equal = begin.isEqual(end); // false