今天Java 8 LocalDateTime在特定时刻

问题描述 投票:21回答:5

是否有更好/更简单的方法来构建今天早上6点的LocalDateTime对象?

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

不知何故,当我想说的是now().withHours()时,我不喜欢处理分钟/秒/纳米。

java java-8 java-time
5个回答
32
投票

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

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

5
投票

另一种选择(特别是如果你想改变现有的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));

3
投票

接受的答案很好。你也可以创建自己的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);

2
投票

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

import java.time.temporal.ChronoUnit;

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

2
投票

这样可行

LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);
© www.soinside.com 2019 - 2024. All rights reserved.