Javaを使って一日の始まりと終わりを知る方法

Javaを使用して1日の始まりと終わりを取得する方法

1. 概要

この短いチュートリアルでは、we’ll learn how to get the start and the end of a day in Javaを使用して、さまざまなシナリオの単純でわかりやすい例を使用します。

これらの例を作成するために、Java’s 8 Date/Time APIを使用します。

先に進む前に、Javaの8 Date and Timeライブラリについてもう少し詳しく知りたい場合は、hereを開始できます。

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()

同じ結果を得るもう1つの方法は、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つのメソッドを分析して、時間セクションが1日の始まりまたは終わりに設定されたオブジェクトを、別の指定されたLocalDateTimeオブジェクトから直接取得します。

3.1. with()

All classes implementing the Temporal interface can use this method

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

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つのDate and Timeライブラリクラスの洞察について学び、そのクラスとインターフェイスの多くに精通しました。

いつものように、すべての例はour GitHub repositoryでアクセスできます。