具体开发中涉及日期操作的非常多,常见的场景主要有以下几个:
- 当前日期转为字符串
- 指定字符串转为日期
- 取得两个日期之间的天数间隔
- 取得两个日期之间的月份间隔
- 当前日期增加多少天变为哪个日期
- 当前日期增加多少月变为哪个日期
- ......
Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。
Joda-Time主要的特点包括:
易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。
易于扩展:JDK支持多日历系统是通过Calendar的子类来实现,这样就显示的非常笨重而且事实 上要实现其它日历系统是很困难的。Joda-Time支持多日历系统是通过基于Chronology类的插件体系来实现。
提供一组完整的功能:它打算提供 所有关系到date-time计算的功能.Joda-Time当前支持8种日历系统,而且在将来还会继续添加,有着比JDK Calendar更好的整体性能等等。
pom.xml引入:
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
下面是几个常见例子:
代码参见com.critc.JodaDateUtilTest
:
public static void main(String[] args) {
//日期格式化
DateTime dateTime = new DateTime(2012, 12, 13, 16, 30);
System.out.println("当前日期格式化:" + dateTime.toString("yyyyMMdd HHmmss"));
DateTimeFormatter format = DateTimeFormat.forPattern("yyyyMMddHHmmss");
DateTime d2 = DateTime.parse("20170402120023", format);
System.out.println("字符串格式化成日期:" + d2);
//两个日期间隔多少天
LocalDate start = new LocalDate(2012, 12, 14);
LocalDate end = new LocalDate(2013, 01, 15);
int days = Days.daysBetween(start, end).getDays();
System.out.println("两个日期间隔天数:" + days);
int months = Months.monthsBetween(start, end).getMonths();
System.out.println("两个日期间隔月数:" + months);
//当前天增加多少天
dateTime = dateTime.plusDays(31);
System.out.println("当前日期增加多少天变为:" + dateTime);
dateTime = dateTime.plusMonths(2);
System.out.println("当前日期增加多少月变为:" + dateTime);
}
开发建议
实际开发中一定要将涉及日期处理的方法单独拿出来,统一格式,统一类中进行处理,万不可单独处理。