2016-04-28 11 views
7

これよりも午前6時にLocalDateTimeオブジェクトを今日よりも上手く構築する方法はありますか?今日Java 8のLocalDateTimeは特定の時間に

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

どういうわけか私が言いたいすべてがnow().withHours()とき分/秒/ナノを扱って好きではありません。

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

答えて

15

LocalDateは(一日分の時間)は2つの引数を取り、そのようなthis oneとしてatTime方法を、さまざまなオーバーロードされています。あなたもこれを行うには、独自の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

受け入れ答えは良いものです:

1

別の選択肢を(特別既に存在するLocalDateTimeを変更したい場合)は、with() methodを使用することです。

パラメータとしてTemporalAdjusterを受け付けます。このメソッドにLocalTimeを渡すと、あなたが必要な正確に何んとjavadocによると、:

LOCALDATEとにLocalTimeはTemporalAdjusterを実装するクラス、したがって、この方法では、日付、時間を変更したり、相殺するために使用することができます。

    result = localDateTime.with(date);
    result = localDateTime.with(time);

ので、コードは次のようになります。

LocalDateTime todayAt6 = LocalDateTime.now().with(LocalTime.of(6, 0)); 
0

LocalDate.now().atTime(6, 0)に代わるものです:

import java.time.temporal.ChronoUnit; 

LocalDateTime.now().truncatedTo(ChronoUnit.DAYS).withHour(6); 
関連する問題