时间和日期如何表示?

在 Java 新的时间日期API中,使用 LocalDateTime 表示。

  1. LocalDateTime now = LocalDateTime.now();
  2. System.out.println(now); //2021-05-21T16:06:26.813222800

输出的时间字符串是按照 ISO_8601 标准进行格式化输出的,这样某一刻的时间就被表示了出来。同时,还有表示年月日的LocalDate与表示时分秒的LocalTime,可以认为 LocalDateTime = LocalDate + LocalTime,它们之间可以进行相互转换。

  1. LocalDateTime now = LocalDateTime.now();
  2. System.out.println(now); // 2021-05-21T16:22:32.210186700
  3. LocalDate localDate = now.toLocalDate();
  4. System.out.println(localDate);// 2021-05-21
  5. LocalTime localTime = now.toLocalTime();
  6. System.out.println(localTime);// 16:22:32.210186700
  7. LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
  8. System.out.println(localDateTime);// 2021-05-21T16:22:32.210186700

这里我们可以看到,它默认的打印输出格式中有一个字符T分割了日期与时间,我们一般期望得到 2021-05-21 16:22:32 这种格式。使用 DateTimeFormat 对其进行格式化。

  1. LocalDateTime now = LocalDateTime.now();
  2. System.out.println(now); // 2021-05-21T16:32:55.073688800
  3. // 设定格式化格式
  4. DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
  5. String nowStr = now.format(dtf);
  6. System.out.println(nowStr);// 2021-05-21 16:32:55
  7. LocalDateTime parseNow = LocalDateTime.parse(nowStr, dtf);
  8. System.out.println(parseNow);// 2021-05-21T16:32:55

如何操作时间与日期?

当我们拿到一个 LocalDateTime 对象时,很可能需要拿到、或者修改对应的 年月日时分秒 信息,LocalDateTime 对象已经有相应的API。

  1. LocalDateTime now = LocalDateTime.now();
  2. System.out.println(now); // 2021-05-21T16:55:40.901764700
  3. // 取出对应的数据
  4. System.out.println(now.getYear()); // 2021
  5. System.out.println(now.getMonthValue()); // 5
  6. System.out.println(now.getDayOfMonth()); // 21
  7. System.out.println(now.getHour()); // 16
  8. System.out.println(now.getMinute()); // 55
  9. System.out.println(now.getSecond()); // 40
  10. // 使用 with 设置时间
  11. System.out.println(now.withYear(2008)); // 2008-05-21T16:55:40.901764700
  12. // 使用 plus minus,增加、减少时间
  13. System.out.println(now.plusMonths(2)); // 2021-07-21T16:55:40.901764700
  14. System.out.println(now.minusDays(33)); // 2021-04-18T16:55:40.901764700

可以看到在修改时间后,原来的时间没有被修改,只是返回了一个新的修改后的时间对象。