返回

JAVA8时间工具类转换

后端

JAVA8时间工具类转换

==========
在JDK1.8以前时间工具类一般都是DateCalendarSimpleDateFormat,这些类对于时间的操作不够友好。从JDK1.8开始引入了新的时间类,新旧时间类进行了拆分,新类使用起来非常方便。下面列出了Java 8中常用的时间类:

  • LocalDateTime:表示一个日期和时间,包括年月日、时分秒、毫秒和纳秒。
  • LocalDate:表示一个日期,包括年月日。
  • LocalTime:表示一个时间,包括时分秒、毫秒和纳秒。
  • Instant:表示一个时间点,从1970年1月1日午夜开始的毫秒数。
  • Duration:表示两个时间点之间的持续时间。
  • Period:表示两个日期之间的持续时间。
  • ChronoUnit:枚举类,提供了一些常用的时间单位,如DAYSHOURSMINUTESSECONDSMILLIS等。

新旧时间类转换

==========
旧时间类与新时间类的转换也非常方便,可以使用toInstant()方法将旧时间类转换为Instant,然后使用LocalDateTimeLocalDateLocalTimeofInstant()方法将Instant转换为新时间类。例如:

// 将Date转换为LocalDateTime
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault());

// 将Calendar转换为LocalDate
LocalDate localDate = LocalDate.ofInstant(calendar.toInstant(), ZoneId.systemDefault());

// 将SimpleDateFormat转换为LocalTime
LocalTime localTime = LocalTime.ofInstant(simpleDateFormat.parse("2023-08-29 12:34:56").toInstant(), ZoneId.systemDefault());

时间操作

==========
新时间类提供了很多方便的时间操作方法,例如:

  • plusDays()plusWeeks()plusMonths()plusYears():将一个日期加上指定的天数、周数、月数或年数。
  • minusDays()minusWeeks()minusMonths()minusYears():将一个日期减去指定的天数、周数、月数或年数。
  • withDayOfMonth()withMonth()withYear():设置一个日期的日、月或年。
  • isBefore()isAfter():比较两个日期的大小。
  • isEqual():判断两个日期是否相等。

常见问题

==========

1. 如何将一个字符串转换为LocalDateTime

可以使用LocalDateTime.parse()方法,该方法接受一个字符串和一个格式化器。例如:

String dateString = "2023-08-29 12:34:56";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime localDateTime = LocalDateTime.parse(dateString, formatter);

2. 如何将一个LocalDateTime转换为字符串?

可以使用LocalDateTime.format()方法,该方法接受一个格式化器。例如:

LocalDateTime localDateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateString = localDateTime.format(formatter);

3. 如何计算两个日期之间的差值?

可以使用Duration.between()方法,该方法接受两个时间点。例如:

LocalDateTime startDateTime = LocalDateTime.of(2023, 8, 29, 12, 34, 56);
LocalDateTime endDateTime = LocalDateTime.of(2023, 8, 29, 13, 34, 56);
Duration duration = Duration.between(startDateTime, endDateTime);
long days = duration.toDays(); // 1
long hours = duration.toHours(); // 1
long minutes = duration.toMinutes(); // 60
long seconds = duration.getSeconds(); // 60