4.2基于joda-time的日期操作

具体开发中涉及日期操作的非常多,常见的场景主要有以下几个:

  • 当前日期转为字符串
  • 指定字符串转为日期
  • 取得两个日期之间的天数间隔
  • 取得两个日期之间的月份间隔
  • 当前日期增加多少天变为哪个日期
  • 当前日期增加多少月变为哪个日期
  • ......

Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time。可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成。
Joda-Time主要的特点包括:

  1. 易于使用:Calendar让获取"正常的"的日期变得很困难,使它没办法提供简单的方法,而Joda-Time能够 直接进行访问域并且索引值1就是代表January。

  2. 易于扩展:JDK支持多日历系统是通过Calendar的子类来实现,这样就显示的非常笨重而且事实 上要实现其它日历系统是很困难的。Joda-Time支持多日历系统是通过基于Chronology类的插件体系来实现。

  3. 提供一组完整的功能:它打算提供 所有关系到date-time计算的功能.Joda-Time当前支持8种日历系统,而且在将来还会继续添加,有着比JDK Calendar更好的整体性能等等。

pom.xml引入:

       
            joda-time
            joda-time
            2.9.9
        

下面是几个常见例子:
代码参见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);

    }

开发建议
实际开发中一定要将涉及日期处理的方法单独拿出来,统一格式,统一类中进行处理,万不可单独处理。

源码下载

本例子详细源码

你可能感兴趣的:(4.2基于joda-time的日期操作)