时间类
LocalDate -- 年月日
LocalTime -- 时分秒
LocalDateTime -- 年月日时分秒
LocalDateTime可以转换成其它两个类的实例:
LocalDateTime now = LocalDateTime.now();
LocalDate localDate = now.toLocalDate();
LocalTime localTime = now.toLocalTime();
这三个类的使用方法都非常相似:
LocalDateTime now = LocalDateTime.now();
LocalDate now1 = LocalDate.now();
LocalTime.now();
LocalDateTime localDateTimeOf = LocalDateTime.of(2022, 9, 13,
12, 50, 30);
LocalDate localDateOf = LocalDate.of(9, 13, 12);
LocalTime localTimeOf = LocalTime.of(12, 50, 30);
从字符串中构造:
System.out.println(LocalDateTime.parse("2022-09-13T13:00:00"));
System.out.println(LocalDate.parse("2019-10-18"));
System.out.println(LocalTime.parse("12:03:00"));
parse还有两个参的重载函数,单参数的函数是调用两个参数的重载函数:
DateTimeFormatter dtf = DateTimeFormatter
.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
System.out.println(LocalDateTime.
parse("2022年12月18日 19时30分40秒", dtf));
关于yyyy MM这段的含义,在DateTimeFormatter的定义文件中有说明。
format不仅可以用于构造还可能用于格式化输出:
System.out.println(LocalDateTime.now().format(dtf));
时间日期的计算:
DateTimeFormatter dtf =
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime dateTime =
LocalDateTime.parse("2000年10月01日 12时20分10秒", dtf);
System.out.println(dateTime.format(dtf));
System.out.println(
dateTime.plus(1, ChronoUnit.DAYS).format(dtf));
System.out.println(
dateTime.plus(-1, ChronoUnit.DAYS).format(dtf));
第二个参数指定单位(年,月, 日等)
plus*函数:
System.out.println(dateTime.plusHours(2).format(dtf));
针对各单位(年,月,日...)提供了一些便捷函数!还有一些minus*用法和plus一样。
with*函数:
LocalDateTime now = dateTime.with(LocalDateTime.now());
System.out.println(now.format(dtf));
System.out.println(dateTime.format(dtf));
System.out.println(dateTime.withHour(10).format(dtf));
api文档中的描述:Returns an adjusted copy of this date-time,
返回修改后的副本,原来的值不会改变。
时间间隔
Period
DateTimeFormatter dtf =
DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime dateTime =
LocalDateTime.parse("2000年10月01日 12时20分10秒", dtf);
LocalDateTime now =
LocalDateTime.parse("2020年11月11日 11时21分02秒", dtf);
Period between = Period.between(dateTime.toLocalDate(),
now.toLocalDate());
System.out.println(between.getYears()); // 20 年
System.out.println(between.getMonths()); // 1
System.out.println(between.getDays()); // 11 - 01 = 10
Duration:
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");
LocalDateTime dateTime = LocalDateTime.parse("2000年10月01日 12时20分10秒", dtf);
LocalDateTime now = LocalDateTime.parse("2000年10月01日 13时20分20秒", dtf);
Duration between = Duration.between(dateTime, now);
System.out.println(between.getSeconds());
可以从中获取经过的总的秒数或总的纳秒数。