LoginSignup
7
5

More than 5 years have passed since last update.

LocalDateTimeの時刻を特定の時刻に設定する

Posted at

Java8から追加されたDate Time API。この中にあるLocalDateTimeを使って書いたコードで、時にこんなコードを見かける。

各フィールドを逐一設定する.java
LocalDateTime ldt = LocalDateTime.now().withHour(12).withMinute(0).withSecond(0).withNano(0);

「今日の12時」のような設定なのだが、時刻の各フィールドを一つ一つ設定している。
まあCalendar使ってた時は基本的に一つ一つの設定だったから流れでこうなったのかもしれない。
しかし、これはwithXxx()のたびに新規インスタンスが生成されて効率が悪い。

こんな時に使うのがLocalDateTime#withだ。

public LocalDateTime with(TemporalAdjuster adjuster)
この日付/時間の調整済のコピーを返します。
これは、日付/時間を調整して、この日付/時間に基づくLocalDateTimeを返します。調整は、指定されたアジャスタ戦略オブジェクトを使用して行われます。どのような調整が行われるかを理解するには、アジャスタのドキュメントを参照してください。

TemporalAdjusterとはあまりなじみがないが、ここでは単純に次のような使い方だけ紹介する。

一発で12時に設定する.java
LocalDateTime ldt = LocalDateTime.now().with(LocalTime.of(12, 0));

LocalTimeもこのTemporalAdjusterを実装しているため、withメソッドに渡すことができる。
そして、LocalDateTimeのインスタンスが持つ時刻を引数の時刻に変更してくれるのだ。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5