Java日期处理工具JodaTime

主要是介绍下有这么一个好用的工具包, 简单写几个使用的例子



maven依赖

<dependency>
    <groupId>joda-time</groupId>
    <artifactId>joda-time</artifactId>
    <version>2.9.4</version>
</dependency>

使用示例

最常用的一个类就是DateTime类, 它有很多构造方法和时间的操作方法

    public static void main(String[] args) {
        DateTime dateTime;
        // 创建当前时间
        dateTime = DateTime.now();
        // 创建某一时刻的时间
        dateTime = new DateTime(2016, 6, 6, 12, 1, 1, 999);
        // 通过系统毫秒数创建当前时间
        dateTime = new DateTime(System.currentTimeMillis());
        // 通过格式化字符串创建时间
        dateTime = DateTime.parse("2016-06-30 12:01:01", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));

        // 与JDK 的 Date 相互转换
        dateTime = new DateTime(new Date());
        Date jdkDate = dateTime.toDate();

        // 默认输出格式
        System.out.println(dateTime.toString()); // 2016-06-29T15:36:41.591+08:00
        // 格式化输出
        System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss.SSS")); // 2016-06-06 12:01:01.999
        // 输出星期几
        System.out.println(dateTime.toString("E yyyy-MM-dd HH:mm:ss")); // 星期三 2016-06-29 15:38:47

        // 时间操作, 注意每个返回都是一个新对象
        // 33天后
        dateTime = new DateTime(2016, 1, 1, 12, 10, 10, 10);  // 2016-01-01 12:10:10.010
        dateTime = dateTime.plusDays(33);  // 2016-02-03 12:10:10.010
        // 年月日时分秒 还有毫秒, 都能加

        // 某月最后一天
        dateTime = new DateTime(2016, 1, 1, 12, 10, 10, 10);  // 2016-01-01 12:10:10.010
        dateTime = dateTime.dayOfMonth().withMaximumValue();  // 2016-01-31 12:10:10.010

        // 某周第一天
        dateTime = new DateTime(2016, 1, 1, 12, 10, 10, 10);  // 2016-01-01 12:10:10.010
        dateTime = dateTime.dayOfWeek().withMinimumValue();   // 2015-12-28 12:10:10.010
        // 类似的有 yearOfCentury dayOfYear monthOfYear dayOfMonth dayOfWeek

        // 距离今天多少天
        dateTime = DateTime.parse("2016-06-30 12:01:01", DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"));
        int days = Days.daysBetween(dateTime, DateTime.now()).getDays();  // 后面早则为负数
    }

其实创建DateTime对象时也能传ISODateTimeFormat格式化的字符串, 如:”2006-01-26T13:30:00-06:00”, 但要确保给出的字符串格式正确, 可以参考Joda API文档