1. 概要

この短いチュートリアルでは、さまざまなシナリオの単純でわかりやすい例を使用して、Javaで1日の始まりと終わりを取得する方法を学習します。

Javaの8Date/ Time API を使用して、これらの例を作成します。

先に進む前にJavaの8日付と時刻ライブラリについてもう少し読みたい場合は、ここから始めることができます。

2. LocalDateオブジェクトから

まず、次のようなLocalDateオブジェクトとして指定された1日の開始または終了を取得する方法を見てみましょう。

LocalDate localDate = LocalDate.parse("2018-06-23");

2.1. atStartOfDay()

特定の日の始まりを表すLocalDateTimeを取得する最も簡単な方法は、 atStartOfDay()メソッドを使用することです。

LocalDateTime startOfDay = localDate.atStartOfDay();

このメソッドはオーバーロードされているため、 ZonedDateTime を取得する場合は、ZoneIdを指定して取得できます。

ZonedDateTime startOfDay = localDate.atStartOfDay(ZoneId.of("Europe/Paris"));

2.2. of()

同じ結果を得る別の方法は、 of()メソッドを使用して、LocalDateLocalTimeの静的フィールドの1つを提供することです。

LocalDateTime startOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT);

LocalTime は、次の静的フィールドを提供します: MIDNIGHT (00:00)、 MIN (00:00)、 NOON (12:00 )、および MAX (23:59:59.999999999)。

したがって、1日の終わりを取得する場合は、MAXの値を使用します。

別の方法で試してみましょう。

2.3. atTime()

このメソッドはオーバーロードされており、時間、分、秒、さらにはナノ秒を使用して目的の時間を指定できます。

この場合、とにかく、LocalTimeMAXフィールドを引数として使用して、特定の日の最後の瞬間を取得します。

LocalDateTime startOfDay = localDate.atTime(LocalTime.MAX);

2.4. atDate()

この例は前の例と非常に似ていますが、今回は LocalTimeオブジェクトのatDate()メソッドを使用し、LocalDateを次のように渡します。引数:

LocalDateTime endOfDate = LocalTime.MAX.atDate(localDate);

3. LocalDateTimeオブジェクトから

言うまでもなく、そこから LocalDate を取得し、セクション2のいずれかのメソッドを使用して、1日の終わりまたは開始を取得できます。

LocalDateTime localDateTime = LocalDateTime
  .parse("2018-06-23T05:55:55");
LocalDateTime endOfDate = localDateTime
  .toLocalDate().atTime(LocalTime.MAX);

ただし、このセクションでは、他の1つのメソッドを分析して、別の指定された LocalDateTime オブジェクトから直接、時刻セクションが1日の始まりまたは終わりに設定されたオブジェクトを取得します。

3.1. with()

Temporalインターフェースを実装するすべてのクラスは、このメソッドを使用できます

この場合、 TemporalField (特に、 ChronoField Enum 値の1つ)とlong引数をとるメソッドのシグネチャを使用します。フィールドの新しい値:

LocalDateTime endOfDate = localDateTime.with(ChronoField.NANO_OF_DAY, LocalTime.MAX.toNanoOfDay());

4. ZonedDateTimeオブジェクトから

ZonedDateTime、が指定されている場合、 Temporal interface も実装しているため、 with()メソッドを使用できます。

ZonedDateTime startofDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0);

5. 結論

要約すると、さまざまなケースシナリオについて、Javaで1日の始まりと終わりを取得するさまざまな方法を分析しました。

最後に、Javaの8つの日付と時刻のライブラリクラスの洞察について学び、そのクラスとインターフェイスの多くに精通しました。

いつものように、すべての例は私たちのGitHubリポジトリでアクセスできます。