时间和日期如何表示?
在 Java 新的时间日期API中,使用 LocalDateTime
表示。
LocalDateTime now = LocalDateTime.now();
System.out.println(now); //2021-05-21T16:06:26.813222800
输出的时间字符串是按照 ISO_8601 标准进行格式化输出的,这样某一刻的时间就被表示了出来。同时,还有表示年月日的LocalDate
与表示时分秒的LocalTime
,可以认为 LocalDateTime
= LocalDate
+ LocalTime
,它们之间可以进行相互转换。
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 2021-05-21T16:22:32.210186700
LocalDate localDate = now.toLocalDate();
System.out.println(localDate);// 2021-05-21
LocalTime localTime = now.toLocalTime();
System.out.println(localTime);// 16:22:32.210186700
LocalDateTime localDateTime = LocalDateTime.of(localDate, localTime);
System.out.println(localDateTime);// 2021-05-21T16:22:32.210186700
这里我们可以看到,它默认的打印输出格式中有一个字符T
分割了日期与时间,我们一般期望得到 2021-05-21 16:22:32
这种格式。使用 DateTimeFormat
对其进行格式化。
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 2021-05-21T16:32:55.073688800
// 设定格式化格式
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String nowStr = now.format(dtf);
System.out.println(nowStr);// 2021-05-21 16:32:55
LocalDateTime parseNow = LocalDateTime.parse(nowStr, dtf);
System.out.println(parseNow);// 2021-05-21T16:32:55
如何操作时间与日期?
当我们拿到一个 LocalDateTime
对象时,很可能需要拿到、或者修改对应的 年月日时分秒
信息,LocalDateTime
对象已经有相应的API。
LocalDateTime now = LocalDateTime.now();
System.out.println(now); // 2021-05-21T16:55:40.901764700
// 取出对应的数据
System.out.println(now.getYear()); // 2021
System.out.println(now.getMonthValue()); // 5
System.out.println(now.getDayOfMonth()); // 21
System.out.println(now.getHour()); // 16
System.out.println(now.getMinute()); // 55
System.out.println(now.getSecond()); // 40
// 使用 with 设置时间
System.out.println(now.withYear(2008)); // 2008-05-21T16:55:40.901764700
// 使用 plus minus,增加、减少时间
System.out.println(now.plusMonths(2)); // 2021-07-21T16:55:40.901764700
System.out.println(now.minusDays(33)); // 2021-04-18T16:55:40.901764700
可以看到在修改时间后,原来的时间没有被修改,只是返回了一个新的修改后的时间对象。