简介

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

不为明天而烦恼,不为昨天而叹息,只为今天更美好