1概要

このクイックチュートリアルでは、

ZonedDateTime

を__Stringに変換する方法を説明します。

また、

Stringから

ZonedDateTime__を解析する方法についても説明します。


2

ZonedDateTime


を作成する

まず、タイムゾーンがUTCの

ZonedDateTime

から始めます。これを実現する方法はいくつかあります。

年、月、日などを指定できます。

ZonedDateTime zonedDateTimeOf = ZonedDateTime.of(2018, 01, 01, 0, 0, 0, 0, ZoneId.of("UTC"));

現在の日時から

ZonedDateTime

を作成することもできます。

ZonedDateTime zonedDateTimeNow = ZonedDateTime.now(ZoneId.of("UTC"));

または、既存の

LocalDateTime

から

ZonedDateTime

を作成することもできます。

LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneId.of("UTC"));


3

ZonedDateTime

から

String


それでは、

ZonedDateTime



Stringに変換しましょう。** このためには、

DateTimeFormatter__クラスを使用します。

タイムゾーンデータを表示するために使用できる特殊なフォーマッタがいくつかあります。フォーマッタの完全なリストはhttps://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html[ここ]にありますが、その他のいくつかを見ていきます。一般的なもの

  • タイムゾーンオフセットを表示したい場合は、

    フォーマッタ

    “Z”または “X” ** を使用できます。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
String formattedString = zonedDateTime.format(formatter);

これにより、次のような結果が得られます。

02/01/2018 - 13:45:30 +0000

  • タイムゾーン名を含めるには、小文字の “z”を使用できます。

DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss z");
String formattedString2 = zonedDateTime.format(formatter2);

この出力は次のようになります。

02/01/2018 - 13:45:30 UTC


4

String

から

ZonedDateTime


このプロセスは逆にも機能します。文字列を受け取り、それを

ZonedDateTime

に戻すことができます。

これを行う1つの方法は、

ZonedDateTime

クラスの** static

parse()

メソッドを使用することです。

ZonedDateTime zonedDateTime = ZonedDateTime.parse("2011-12-03T10:15:30+01:00");

このメソッドは

ISO

ZONED

DATE

TIME

フォーマッタを使用します。

DateTimeFormatter__パラメータを受け取るメソッドのオーバーロードバージョンもあります。ただし、文字列にはゾーン識別子を含める必要があります。そうしないと、例外が発生します。

assertThrows(DateTimeParseException.class, () ->
  ZonedDateTime.parse("2011-12-03T10:15:30", DateTimeFormatter.ISO__DATE__TIME));


String

から

ZonedDateTime

を取得する2番目のオプションは、2つのステップを含みます:** Stringを

LocalDateTimeに変換し、

このオブジェクトを__ZonedDateTimeに変換します。

ZoneId timeZone = ZoneId.systemDefault();
ZonedDateTime zonedDateTime = LocalDateTime.parse("2011-12-03T10:15:30",
  DateTimeFormatter.ISO__DATE__TIME).atZone(timeZone);

log.info(zonedDateTime.format(DateTimeFormatter.ISO__ZONED__DATE__TIME));

この間接的な方法は、単純に日時とゾーンIDを組み合わせたものです。

INFO: 2011-12-03T10:15:30+02:00[Europe/Athens]----

日付に対する文字列の解析の詳細については、https://www.baeldung.com/java-string-to-date[article]を参照してください。

===  **  5結論**

この記事では、__ZonedDateTime__を作成する方法と、それを__Stringとしてフォーマットする方法を説明しました。

また、日付時刻文字列を解析して__ZonedDateTime__に変換する方法についても簡単に説明しました。

このチュートリアルのソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-dates[Githubで入手可能]です。