Java 8 LocalDateTime 今天特定时间

Java 8 LocalDateTime today at specific hour

有没有nicer/easier方法来构造代表今天早上 6 点的 LocalDateTime 对象?

LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);

我不喜欢和 minutes/seconds/nano 打交道,因为我只想说 now().withHours()

LocalDate 有各种重载的 atTime 方法,例如 this one,它有两个参数(一天中的小时和分钟):

LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0);

接受的答案是一个很好的答案。您也可以创建自己的 clock 来执行此操作:

Clock clock = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(clock);

如果重复使用,这可能是一个有用的选项,因为时钟可以存储在静态变量中:

public static final Clock CLOCK = Clock.tick(Clock.systemDefaultZone(), Duration.ofHours(1));
LocalDateTime dt = LocalDateTime.now(CLOCK);

另一种选择(特别是如果你想更改已经存在的 LocalDateTime)是使用 with() method.

它接受一个TemporalAdjuster作为参数。根据 javadoc,将 LocalTime 传递给此方法正是您所需要的:

The classes LocalDate and LocalTime implement TemporalAdjuster, thus this method can be used to change the date, time or offset:

   result = localDateTime.with(date);
   result = localDateTime.with(time);

因此,代码将是:

LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0));

LocalDate.now().atTime(6, 0) 的替代方法是:

import java.time.temporal.ChronoUnit;

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);

有效

LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);