Java 8 LocalDateTime今天特定时间

Java 8 LocalDateTime今天特定时间,java,java-8,java-time,Java,Java 8,Java Time,有没有比这更好/更简单的方法来构造表示今天上午6点的LocalDateTime对象 LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0); 不知何故,我不喜欢处理分/秒/纳米,因为我只想说now()。withHours()LocalDate有各种重载的atTime方法,例如,它需要两个参数(小时和分钟): 公认的答案是好的。您也可以创建自己的来执行此操作:

有没有比这更好/更简单的方法来构造表示今天上午6点的
LocalDateTime
对象

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

不知何故,我不喜欢处理分/秒/纳米,因为我只想说
now()。withHours()
LocalDate
有各种重载的
atTime
方法,例如,它需要两个参数(小时和分钟):


公认的答案是好的。您也可以创建自己的来执行此操作:

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
)是使用

它接受一个
临时调整器
作为参数。根据,将
LocalTime
传递给此方法正好满足您的需要:

LocalDate和LocalTime类实现了TemporalAdjuster,因此此方法可用于更改日期、时间或偏移量:

结果=localDateTime.with(日期)
结果=localDateTime.with(时间)

因此,代码将是:

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);
LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);