先引入依赖
<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/