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);
有没有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);