是否有更好/更简单的方法来构建今天早上6点的LocalDateTime
对象?
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
不知何故,当我想说的是now().withHours()
时,我不喜欢处理分钟/秒/纳米。
LocalDate
有各种重载的atTime
方法,例如this one,它有两个参数(一天一小时和一小时):
LocalDateTime todayAt6 = LocalDate.now().atTime(6, 0);
另一种选择(特别是如果你想改变现有的LocalDateTime
)是使用with()
method。
它接受TemporalAdjuster
作为参数。根据javadoc的说法,将LocalTime
传递给这种方法正是你所需要的:
LocalDate和LocalTime类实现TemporalAdjuster,因此该方法可用于更改日期,时间或偏移量:
result = localDateTime.with(date); result = localDateTime.with(time);
所以,代码将是:
LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(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);
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);