web-dev-qa-db-ja.com

Java 8 LocalDateTime今日の特定の時間

これより午前6時に今日を表すLocalDateTimeオブジェクトを構築するより良い/簡単な方法はありますか?

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

私が言いたいのはnow().withHours()だけであるのに、どういうわけか分/秒/ナノを扱うのは好きではありません。

23
JanM

LocalDateには、 this one などのオーバーロードされたさまざまなatTimeメソッドがあり、2つの引数(時間と分)を取ります。

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

別の選択肢(特に既存の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));
5
user7605325

受け入れられた答えは良いものです。また、独自の 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);
3
JodaStephen

うまくいく

LocalDateTime.now().withHour(3).withMinute(0).withSecond(0);
2
Bruno

LocalDate.now().atTime(6, 0)の代替は次のとおりです。

import Java.time.temporal.ChronoUnit;

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