joda-time快速入门学习

最近项目中有要修改时间一些处理,使用传统的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,只需要掌握DateTime常用的方法,就可以满足项目中对时间操作的需求。
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年

我们可以这样获取一天前的时间:其他时间的纬度减运算与这个类似。

DateTime yesterday = now.minusDays(1);
  • 时间的增运算
方法名方法介绍
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年

时间的加运算类型下面这样,其他时间的纬度减运算与这个类似。

 DateTime plusDays = dateTime.plusDays(1)
  • 设定时间
方法名方法介绍
withDayOfMonth返回LocalDateTime月的第几天
withDayOfYear返回指定时间年的第几天
withHour返回指定时间的小时
withMinute返回指定时间的分钟
withMonth返回指定时间的月
withSecond返回指定时间的秒
withYear返回指定时间年份

通过以上API可以具体设置时间,例如: 设定时间为2019年5月15日23点30分30秒

Date time = now.withYear(2019).withMonthOfYear(5).withDayOfMonth(15)
.withHourOfDay(23).withMinuteOfHour(30).withSecondOfMinute(30);
  • DateTime的转化

上面获取时间返回的类型都是DateTime类型,通常我们需要的类型是java.util.Date这种的,这里只需调用DateTime的to
Date方法即可:

// DateTime转java.util.Date类型
Date date = time.toDate();
// 返回时间为:Wed May 15 23:30:30 CST 2019
System.out.println(time.toDate());
  • 获取当前时间
// 当前时间
DateTime now = new DateTime();
// 也可以这样获取当前时间。
DateTime now = DateTime.now();
  • 格式化时间和解析时间
// 时间格式化正则
String formatter="yyyy-MM-dd HH:mm:ss";
// withTimeAtStartOfDay 获取所在时间的0点时刻
String startTime = now.withTimeAtStartOfDay().toString(formatter);
// 获取当前时间的最后一刻时间即23点59分59秒
String endTime = now.millisOfDay().withMaximumValue().toString(formatter);
// 2019-05-15 00:00:00时间转DateTime类型
DateTime d = DateTime.parse(startTime, DateTimeFormat.forPattern(formatter));
  • 比较时间的大小
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));
  • 计算两个日期的时间差
计算两个日期相差多少天、相差多少月、相差多少年
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);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值