简介
joda-time是一个常用的时间处理类库,它提供了如下几个常用的类:
Instant:用来表示时间轴上一个瞬时的点
DateTime:用来替换JDK的Calendar类
LocalDate:表示一个本地的日期,而不包含时间部分(没有时区信息)
LocalTime:表示一个本地的时间,而不包含日期部分(没有时区信息)
LocalDateTime:表示一个本地的日期-时间(没有时区信息)
Maven依赖
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.10</version>
</dependency>
用法
1. 构造对象(时间):
Date使用: DateTime date = new DateTime(new Date());
现有时间: DateTime now = new DateTime();
DateTime now = new DateTime();
System.out.println(now);
DateTime dt2 = new DateTime(2021,2,12,12,00,30);
System.out.println(dt2);
DateTime dt3 = new DateTime(1618119910486L);
System.out.println(dt3);
DateTime dt4 = new DateTime(new Date());
System.out.println(dt4);
DateTime dt5 = new DateTime("2021-04-11T13:45:10.594+08:00");
System.out.println(dt5);
2. 时间格式化
System.out.println(new DateTime().toString("yyyy-MM-dd HH:mm:ss"));
DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
DateTime dt6 = DateTime.parse("2020-8-20 7:22:45", dateTimeFormatter);
System.out.println(dt6);
System.out.println(dt6.toString("yyyy年MM月dd日 HH:mm:ss EE", Locale.CHINESE));
3. 时间运算 - 加减(年、月、周、天、时、分、秒、毫秒)
DateTime dateTime = new DateTime();
dateTime.plusYears(1);// 加 - 年
dateTime.plusMonths(1);// 加 - 月
dateTime.plusWeeks(1);// 加 - 周
dateTime.plusDays(1);// 加 - 天
dateTime.plusHours(1);// 加 - 时
dateTime.plusMinutes(1);// 加 - 分
dateTime.plusSeconds(1);// 加 - 秒
dateTime.plusMillis(1);// 加 - 毫秒
dateTime.minusYears(1);// 减 - 年
dateTime.minusMonths(1);// 减 - 月
dateTime.minusWeeks(1);// 减 - 周
dateTime.minusDays(1);// 减 - 天
dateTime.minusHours(1);// 减 - 时
dateTime.minusMinutes(1);// 减 - 分
dateTime.minusSeconds(1);// 减 - 秒
dateTime.minusMillis(1);// 减 - 毫秒
4. 时间运算 - 时间间隔(年、月、周、天、时、分、秒、毫秒)
DateTime startTime = new DateTime(2022,8,8, 15,0,0);
DateTime now = new DateTime();
# 时间间隔 【年】
Years.yearsBetween(startTime,now).getYears();
# 时间间隔 【月】
Months.monthsBetween(startTime,now).getMonths();
# 时间间隔 【周】
Weeks.weeksBetween(startTime,now).getWeeks();
# 时间间隔 【天】
Days.daysBetween(startTime,now).getDays();
# 时间间隔 【时】
Hours.hoursBetween(startTime,now).getHours();
# 时间间隔 【分】
Minutes.minutesBetween(startTime,now).getMinutes();
# 时间间隔 【秒】
Seconds.secondsBetween(startTime,now).getSeconds();
4. 今天是星期几?第几月?第几分钟?第几小时?...
DateTime now = new DateTime();
// 今年的第几天
now.getDayOfYear();
// 今年的第几月
now.getDayOfMonth();
// 这周的星期几
now.getDayOfWeek();
// 今天的第几分钟
now.getMinuteOfDay();
// 今天的第几小时
now.getMinuteOfHour();
// ...
5. 月初,月末,年初,年末...
DateTime now = new DateTime();
System.out.println(now.toString("yyyy-MM-dd HH:mm:ss"));
//月初
System.out.println(now.dayOfMonth().withMinimumValue().millisOfDay().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss"));
//月末
System.out.println(now.dayOfMonth().withMaximumValue().millisOfDay().withMaximumValue().toString("yyyy-MM-dd HH:mm:ss"));
//年初
System.out.println(now.dayOfYear().withMinimumValue().millisOfDay().withMinimumValue().toString("yyyy-MM-dd HH:mm:ss"));
//年末
System.out.println(now.dayOfYear().withMaximumValue().millisOfDay().withMaximumValue().toString("yyyy-MM-d HH:mm:ss"));
# 执行结果
2022-08-21 15:34:09
2022-08-01 00:00:00
2022-08-31 23:59:59
2022-01-01 00:00:00
2022-12-31 23:59:59