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()メソッドを使用して、LocalDateとLocalTimeの静的フィールドの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()
このメソッドはオーバーロードされているため、時間、分、秒、さらにはナノ秒を使用して目的の時間を指定できます。
この場合、とにかく、指定された日の最後の瞬間を取得するための引数としてLocalTimeのMAXフィールドを使用します。
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でアクセスできます。