ZonedDateTimeを文字列にフォーマットする
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で入手可能]です。