Java8での、サマータイムのサポートを確認
JavaSE8のDate&Time APIを使って、以下のタイムゾーンでの日時を表示して、サマータイムが考慮されているかを確認。
UTC | Los Angeles | 日本 |
日本は、サマータイムがないので、LosAngelesでの日時を表示。
APIが沢山あっていろいろな方法があると思うのですが、とりあえず以下の実装で表示。
サマータイムの情報は、Daylight saving time dates for U.S.A. – California – Los Angeles between 2015 and 2019で確認しました。
- Los Angelesのサマータイム
- Java Version
- code1
1.UTC日時を取得するのに、以下の方法を使用(同じように各ゾーンの日時を取得)
・ZoneId#ofメソッドで「UTC」を指定
・ZonedDateTime#ofメソッドの第2引数に上記で作成したZoneIdクラスを指定
2.1時間毎の時間は、LocalDateTime#plusHoursメソッドで取得
3.日時の表示は、DateTimeFormatter#formatメソッド
private void printZonedDateTime(LocalDateTime baseDatetime) { ZoneId utcZone = ZoneId.of("UTC"); ZoneId losZone = ZoneId.of("America/Los_Angeles"); ZoneId tokyoZone = ZoneId.of("Asia/Tokyo"); System.out.println(String.format("*** Base Date Time(UTC) is %s ***", DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(baseDatetime), utcZone)); IntStream.range(0, 24).forEach(i -> { LocalDateTime plusHours = baseDatetime.plusHours(i); ZonedDateTime utcDatetime = ZonedDateTime.of(plusHours, utcZone); ZonedDateTime losDatetime = ZonedDateTime.of(plusHours, losZone); ZonedDateTime tokyoDatetime = ZonedDateTime.of(plusHours, tokyoZone); String utc = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(utcDatetime); String los = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(losDatetime); String tokyo = DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(tokyoDatetime); System.out.println(String.format("UTC:%s, LosAngels:%s, Tokyo:%s", utc, los, tokyo)); }); }
- code2
サマータイムの開始日「2014.3.9」と終了日「2014.11.2」で実行
System.out.println(String.format("Testing time is %s", ZonedDateTime.now())); DaylightSavingSample instance = new DaylightSavingSample(); // Daylight Saving Time Start System.out.println("----- Daylight Saving Time Start -----"); instance.printZonedDateTime(LocalDateTime.of(2014, Month.MARCH, 9, 0, 0)); // Daylight Saving Time End System.out.println("----- Daylight Saving Time End -----"); instance.printZonedDateTime(LocalDateTime.of(2014, Month.NOVEMBER, 2, 0, 0));
- 実行結果(2014.3.9)
ここでは、2時が3時に1時間すすむので、3時が2回表示されているのでサポートされていることを確認
- 実行結果(2014.11.2)
全コードはPrinting Daylight Saving Time by Java8 · GitHubにアップしました。
まだまだ勉強しないと、、、