これより午前6時に今日を表すLocalDateTime
オブジェクトを構築するより良い/簡単な方法はありますか?
_LocalDateTime todayAt6 = LocalDateTime.now().withHour(6).withMinute(0).withSecond(0).withNano(0);
_
私が言いたいのはnow().withHours()
だけであるのに、どういうわけか分/秒/ナノを扱うのは好きではありません。
LocalDate
には、 this one などのオーバーロードされたさまざまなatTime
メソッドがあり、2つの引数(時間と分)を取ります。
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);
うまくいく
LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);
LocalDate.now().atTime(6, 0)
の代替は次のとおりです。
import Java.time.temporal.ChronoUnit;
LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6);