版权声明:本文为博主原创文章版权归作者和CSDN共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 https://blog.csdn.net/javaee_gao/article/details/89198523
最近项目中有要修改时间一些处理,使用传统的java的Date包或者Calendar类太麻烦而且也不方便,这里推荐使用joda-time.方便实用,废话不多说,实战走起
添加maven的依赖
<!-- https://mvnrepository.com/artifact/joda-time/joda-time -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
DateTime常用的方法
时间的减运算
方法名 | 方法介绍 |
---|---|
minusDays(n) | 返回DateTime类型的前n天 |
minusHours(n) | 返回DateTime类型的前n小时 |
minusMinutes(n) | 返回DateTime类型的前n分钟 |
minusMonths(n) | 返回DateTime类型前n月 |
minusSeconds(n) | 返回DateTime类型前n秒 |
minusWeeks(n) | 返回DateTime类型前n周 |
minusYears(n) | 返回DateTime类型前n年 |
时间的增运算
方法名 | 方法介绍 |
---|---|
plusDays(n) | 返回DateTime类型的后n天 |
plusHours(n) | 返回DateTime类型的后n小时 |
plusMinutes(n) | 返回DateTime类型的后n分钟 |
plusMonths(n) | 返回DateTime类型后n月 |
plusSeconds(n) | 返回DateTime类型后n秒 |
plusWeeks(n) | 返回DateTime类型后n周 |
plusYears(n) | 返回DateTime类型后n年 |
指定周内天,月中天和年内天
方法名 | 方法介绍 |
---|---|
withDayOfMonth | 返回LocalDateTime月的第几天 |
withDayOfYear | 返回指定时间年的第几天 |
withHour | 返回指定时间的小时 |
withMinute | 返回指定时间的分钟 |
withMonth | 返回指定时间的月 |
withSecond | 返回指定时间的秒 |
withYear | 返回指定时间年份 |
根据传入的时间获取,传入时间当天开始时间和结束时间
// 当前时间
DateTime now = new DateTime();
// 时间格式化正则
String formatter="yyyy-MM-dd HH:mm:ss";
// 当天开始时间和结束时间
String startTime = now.withTimeAtStartOfDay().toString(formatter);
String endTime = now.millisOfDay().withMaximumValue().toString(formatter);
// 时间运算,这里只举例天的运算
DateTime yesterday = now.minusDays(1);
DateTime tomorrow = now.plusDays(1);
时间的比较与差值运算
DateTime A = DateTime.now()
DateTime B= DateTime.now().plusDays(1)
// 比较时间A是否在时间B之后
System.out.println(A.isAfter(B));
// 比较时间A是否在时间B之前
System.out.println(A.isBefore(B));
// 比较时间A时间是否与B时间相等
System.out.println(A.isEqual(B));
9、计算两个日期相差多少天、相差多少月、相差多少年
DateTime nextFirstDay= dateTime.dayOfYear().withMinimumValue();
DateTime nextLastDay= dateTime.dayOfYear().withMaximumValue();
// 计算相差多少天
int days = Days.daysBetween(nextFirstDay, nextLastDay).getDays();
// 计算相差多少月
int months = Months.monthsBetween(nextFirstDay, nextLastDay).getMonths();
// 计算相差多少年
int years =Years.yearsBetween(nextFirstDay, nextLastDay).getYears();
// 计算相差多少小时
int hours = Hours.hoursBetween(nextFirstDay, nextLastDay).getHours();
// 计算相差多少小时
int minutes = Minutes.minutesBetween(nextFirstDay, nextLastDay).getMinutes();
时间状态信息
// 月中天,年中天,周中天
DateTime now = new DateTime();
System.out.println("月中天" + now.dayOfMonth().get() + " 年中天" + now.dayOfYear().get() + " 周内天" + now.dayOfWeek().get());
// 得到任何日期所在周的第一天与最后一天
DateTime dateTime=new DateTime();
// 周一的现在时刻(假设今天周三下午5点,这里返回就是周一的下午5点)
String monday= dateTime.dayOfWeek().withMinimumValue().toString(“yyyyMMdd”);
// 周末的现在时刻 (假设今天周三下午5点,这里返回就是周日的下午5点)
String sunday= dateTime.dayOfWeek().withMaximumValue().toString(“yyyyMMdd”);
// 本周周一的0点
String week1 = now.millisOfDay().withMinimumValue().withDayOfWeek(1).toString(formatter);
//本周周末的23点59分59秒
String week2 = now.millisOfDay().withMaximumValue().withDayOfWeek(7).toString(formatter);
DateTime dateTime=new DateTime();
//得到任何日期所在月的第一天(假设今天周三下午5点,这里返回就是此月1号的下午5点)与最后一天
String first= dateTime.dayOfMonth().withMinimumValue().toString(“yyyyMMdd”);
//得到任何日期所在月的第一天(假设今天周三下午5点,这里返回就是此月末那天的下午5点)与最后一天
String last= dateTime.dayOfMonth().withMaximumValue().toString(“yyyyMMdd”);
// 返回当月第一天的零点零分
String month1 = now.dayOfMonth().withMinimumValue().withTimeAtStartOfDay().toString(formatter);
// 当月最后一天的23点59分
String month2 = now.dayOfMonth().withMaximumValue().millisOfDay().withMaximumValue().toString(formatter);