手记

【转】Jode-Time 使用总结

先引入依赖

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

(1)初始化

    //默认格式为:2016-08-31T21:44:06.414+08:00
    System.out.println(new DateTime());

    //使用毫秒初始化,且格式化  结果为:2016-08-31 21:50:33
    System.out.println(new DateTime(new Date().getTime()).toString("yyyy-MM-dd HH:mm:ss"));

    //参数为 年  月  日   小时  分钟  秒 结果为:2016-05-15 01:01:01
    System.out.println(new DateTime(2016,5,15,1,1,1).toString("yyyy-MM-dd HH:mm:ss"));

    //参数为Date类型  结果为:2016-08-31 22:05:44
    System.out.println(new DateTime(new Date()).toString("yyyy-MM-dd HH:mm:ss"));

    //参数为字符串的日期类型  结果为:2016-05-01 00:00:00
    System.out.println(new DateTime("2016-05-01").toString("yyyy-MM-dd HH:mm:ss"));

    System.out.println(DateTime.parse("2016-05-01").toString("yyyy-MM-dd HH:mm:ss"));

    //>>>>以下字符串为时间类型的参数  会报异常
    //System.out.println(new DateTime("15:12:13").toString("yyyy-MM-dd HH:mm:ss"));

    //>>>>以下字符串为参数  会报异常
    //System.out.println(new DateTime("2015-11-11 15:12:13").toString("yyyy-MM-dd HH:mm:ss"));

(2)获取属性

    //获取属性
    //初始化日期为 2016-08-31 20:15:30:222
    DateTime dateTime=new DateTime(2016,8,31,20,15,30,222);
    System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss:SSS EE"));

    //获取年份  结果为:2016
    System.out.println(dateTime.getYear());
    //获取当前月份  结果为:8
    System.out.println(dateTime.getMonthOfYear());
    //获取当前月份中的天数  结果为:31
    System.out.println(dateTime.getDayOfMonth());
    //获取当前天中的小时数  结果为:20
    System.out.println(dateTime.getHourOfDay());
    //获取当前小时中的分钟数 结果为:15
    System.out.println(dateTime.getMinuteOfHour());
    //获取当前分钟中的秒数  结果为:30
    System.out.println(dateTime.getSecondOfMinute());
    //获取当前秒钟的毫秒数  结果为:222
    System.out.println(dateTime.getMillisOfSecond());
    //获取当前时间为星期几  结果为:3
    System.out.println(dateTime.getDayOfWeek());
    //获取当前时间为一年中的第多少周
    System.out.println(dateTime.getWeekOfWeekyear());

    //获取当前世纪中的年份数 结果为:16
    System.out.println(dateTime.getYearOfCentury());

    //得到当前天中的度过的总分钟数 结果为:1215
    System.out.println(dateTime.getMinuteOfDay());
    //得到当前天中度过的总秒数  结果为:72930
    System.out.println(dateTime.getSecondOfDay());

    //得到1970年到当前指定时间的总毫秒数,可作为时间戳使用  结果为:1472645730222
    System.out.println(dateTime.getMillis());

    //得到当前天中度过的总毫秒数 结果为:72930222
    System.out.println(dateTime.getMillisOfDay());
    //得到当前使用本地语言环境 结果为:Asia/Shanghai
    System.out.println(dateTime.getZone());

(3)格式化时间

    DateTime dateTime=new DateTime(2016,8,31,20,15,30,223);
    //第一种格式化方式 输出为:2016-08-31 20:15:30:223
    System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //第二种格式化方式 输出为:时间为2016年8月31日,20时15分30秒223微秒
    System.out.println(dateTime.toString("时间为y年M月d日,H时m分s秒SSS微秒"));

    //第三种格式化方式 输出为:2016年08月31日 20:15:30:223 星期三
    System.out.println(dateTime.toString("yyyy年MM月dd日 HH:mm:ss:SSS EE"));

    //第四种格式化方式 星期根据Locale参数显示对应的国家信息,Locale.KOREA为韩国 输出为:2016年08月31日 20:15:30 수
    System.out.println(dateTime.toString("yyyy年MM月dd日 HH:mm:ss EE", Locale.KOREA));

    //第五种格式化方式
    System.out.println(dateTime.toString(DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss:SSS")));

(4)对时间的操作

    DateTime dateTime=new DateTime(2016,8,31,20,15,30,223);
    System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //加1年 结果为:2017-08-31 20:15:30:223
    System.out.println(dateTime.plusYears(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1月 结果为:2016-09-30 20:15:30:223    9月没有31日,自动变成为当月最后1天
    System.out.println(dateTime.plusMonths(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1天 结果为:2016-09-01 20:15:30:223
    System.out.println(dateTime.plusDays(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1个小时  结果为:2016-08-31 21:15:30:223
    System.out.println(dateTime.plusHours(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1分钟 结果为: 2016-08-31 20:16:30:223
    System.out.println(dateTime.plusMinutes(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1秒 结果为:2016-08-31 20:15:31:223
    System.out.println(dateTime.plusSeconds(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1毫秒 结果为:2016-08-31 20:15:30:224
    System.out.println(dateTime.plusMillis(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //加1个星期 结果为:2016-09-07 20:15:30:223
    System.out.println(dateTime.plusWeeks(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //加上指定的毫秒数  结果为:2016-08-31 20:15:30:445
    System.out.println(dateTime.plus(222).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //减法 结果为:2015-07-30 19:14:29:222
    System.out.println(dateTime.minusYears(1)//减去1年
            .minusMonths(1)//减去1个月
            .minusDays(1)//减去1天
            .minusHours(1)//减去1小时
            .minusMinutes(1)//减去1分钟
            .minusSeconds(1)//减去1秒钟
            .minusMillis(1)//减去1毫秒
            .toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //addToCopy:在指定的时间单位上加上指定的参数,可以为负数

    //在月份中的天数上,增加10天  结果为:2016-09-10 20:15:30:223
    System.out.println(dateTime.dayOfMonth().addToCopy(10).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //在月份中的天数上,减少1天  结果为:2016-08-30 20:15:30:223
    System.out.println(dateTime.dayOfMonth().addToCopy(-1).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //增加2年  结果为:2018-08-31 20:15:30:223
    System.out.println(dateTime.yearOfCentury().addToCopy(2).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //减少2年 结果为:2014-08-31 20:15:30:223
    System.out.println(dateTime.yearOfCentury().addToCopy(-2).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //其他时间单位以此类推

(5)修改原时间

    DateTime dateTime=new DateTime(2016,8,31,20,15,30,223);
    //修改为新的日期 按年,月,日指定,后面的时间不会改变  结果为:2001-11-20 20:15:30:223
    System.out.println(dateTime.withDate(2001, 11, 20).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改原时间为指定的年份  结果为:2008-08-31 20:15:30:223
    System.out.println(dateTime.withYear(2008).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改当前日期中的月份为指定的月份,参数范围[1,12]  结果为:2016-05-31 20:15:30:223
    System.out.println(dateTime.withMonthOfYear(5).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改月份中的天数 参数范围[1,31] 结果为:2016-08-22 20:15:30:223
    System.out.println(dateTime.withDayOfMonth(22).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改星期中的天数 参数范围[1,7] 结果为:2016-08-29 20:15:30:223  指定为本星期1,为8.29号
    System.out.println(dateTime.withDayOfWeek(1).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改年份中的天数 参数范围[1,366], 结果为:2016-10-26 20:15:30:223  10-26为2016年的第300天
    System.out.println(dateTime.withDayOfYear(300).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改小时  参数范围[0,23] 结果为:2016-08-31 22:15:30:223
    System.out.println(dateTime.withHourOfDay(22).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改分钟 参数范围[0,59] 结果为:2016-08-31 20:33:30:223
    System.out.println(dateTime.withMinuteOfHour(33).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改秒数中的毫秒数 参数范围[0,999] 结果为:2016-08-31 20:15:30:444
    System.out.println(dateTime.withMillisOfSecond(444).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改时间为指定的毫秒数 从1970开始计算  结果为:1970-01-01 08:00:01:000
    System.out.println(dateTime.withMillis(1000).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改当天的毫秒数  从2016-08-31 00:00:00开始计算 结果为:2016-08-31 00:00:02:000
    System.out.println(dateTime.withMillisOfDay(2000).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改时间为当天的起始时间  结果为2016-08-31 00:00:00:000
    System.out.println(dateTime.withTimeAtStartOfDay().toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //修改世纪为指定的世纪 结果为:1016-08-31 20:15:30
    System.out.println(dateTime.withCenturyOfEra(10).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //setCopy:设置指定的时间单位为指定的参数,参数不能为负
    //设定本世纪中的年份时间  参数范围[0,99] 结果为:2010-08-31 20:15:30:223
    System.out.println(dateTime.yearOfCentury().setCopy(10).toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //设置年份  结果为:2012-08-31 20:15:30:223
    System.out.println(dateTime.year().setCopy(2012).toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //其他时间单位以此类推

(6)获取特殊要求的时间

    DateTime dateTime=new DateTime(2016,8,31,20,15,30,223);
    System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //withMaximumValue :得到指定时间单位中的最大时间
    //withMinimumValue:得到指定时间单位中的最小时间

    //获取当前时间所在世纪中最大年份的时间 结果为:2099-08-31 20:15:30:223
    System.out.println(dateTime.yearOfCentury().withMaximumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //获取当前时间所在世纪中最大年份的时间 结果为:2000-08-31 20:15:30:223
    System.out.println(dateTime.yearOfCentury().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //获取当前月中的第一天 结果为:2016-08-01 20:15:30:223
    System.out.println(dateTime.dayOfMonth().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //获取当前月中的最后一天 结果为:2016-08-31 20:15:30:223
    System.out.println(dateTime.dayOfMonth().withMaximumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //获取当前年中的第一天 结果为:2016-12-31 20:15:30:223
    System.out.println(dateTime.dayOfYear().withMaximumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));
    //获取当前年中的最后一天 结果为:2016-01-01 20:15:30:223
    System.out.println(dateTime.dayOfYear().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //获取当前年中第一周中的星期几 比如当前时间2016-08-31为星期3 结果为2016-01-06 20:15:30:223     01-06为星期三
    System.out.println(dateTime.weekOfWeekyear().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));

    //获取当前年中第一个星期中第一天的时间
    System.out.println(dateTime.weekOfWeekyear().withMinimumValue().dayOfWeek().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss:SSS"));

(7)时间的比较

    DateTime startTime=new DateTime(2016,5,1,0,0,0);
    DateTime endTime=new DateTime(2017,12,30,0,0,0);

    //获取年份之差    参数2 减去参数1 得到的年份  结果为:1
    System.out.println(Years.yearsBetween(startTime,endTime).getYears());

    //获取月份之差  参数2-参数1的结果  结果为:19
    System.out.println(Months.monthsBetween(startTime,endTime).getMonths());

    //天数之差    参数2-参数1的结果  结果为:608
    System.out.println(Days.daysBetween(startTime,endTime).getDays());

    //小时之差  参数2-参数1的结果  结果为:14592
    System.out.println(Hours.hoursBetween(startTime,endTime).getHours());

    //分钟之差  结果为:875520
    System.out.println(Minutes.minutesBetween(startTime,endTime).getMinutes());

    //秒数之差 结果为:52531200
    System.out.println(Seconds.secondsBetween(startTime,endTime).getSeconds());

    //调用者与参数比较
    //调用者>参数  返回1
    //调用者==参数  返回0
    //调用者<参数  返回-1
    System.out.println(startTime.compareTo(endTime));

    //调用者时间是否在参数时间之后  返回:false
    System.out.println(startTime.isAfter(endTime));
    //调用者时间是否在参数时间之前 返回:true
    System.out.println(startTime.isBefore(endTime));
    //调用者时间是否等于参数时间 返回:false
    System.out.println(startTime.isEqual(endTime));
    //调用者时间是否在当前时间之后 返回:false
    System.out.println(startTime.isAfterNow());
    //调用这是间是否在当前时间之前 返回:true
    System.out.println(startTime.isBeforeNow());
    //调用者时间是否等于当前时间 返回:false
    System.out.println(startTime.isEqualNow());

(8)与jdkAPI互换

    //java.util.Date转换成DateTime
    DateTime dateTime=new DateTime(new Date());

    //DateTime转换成java.util.Date
    Date date=dateTime.toDate();

    //DateTime转换成Calendar
    Calendar calendar=dateTime.toCalendar(Locale.CHINA);

转自:zhangyajun http://www.like666.com/2016/09/05/jode-time%E4%BD%BF%E7%94%A8%E6%80%BB%E7%BB%93/

0人推荐
随时随地看视频
慕课网APP