是否有更好/更简单的方法来构造LocalDateTime
对象,代表今天早上6点比这个更早?Java 8 LocalDateTime今天在特定时间
LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
不知怎的,我不喜欢应付分/秒/纳米当所有我想说的是now().withHours()
。
是否有更好/更简单的方法来构造LocalDateTime
对象,代表今天早上6点比这个更早?Java 8 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);
接受的答案是一个很好的。您也可以创建自己的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
这种方法不正是你所需要的:
的类LOCALDATE的和本地时间实现TemporalAdjuster,因此可以用这个方法来更改日期,时间或偏移:
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);