「yyyy-MM-dd hh:mm:ss z」という形式の Date を含むデータの入力ストリームがあります。TimeZone は、Date をさらに伝播する際に保持する必要があります。以下はテスト プログラム (エラー スタックを含む) です - 私のソリューションの何が問題なのですか?
public class Test {
public static void main(String[] args) {
try {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss z");
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 1st approach: " + e.getMessage());
}
try {
DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyy-MM-dd hh:mm:ss z").toFormatter();
ZonedDateTime zdt = ZonedDateTime.parse("2016-12-09 09:30:21 UTC", dtf);
System.out.println(zdt);
} catch (Exception e) {
System.err.println("Exception in 2nd approach: " + e.getMessage());
}
}
}
出力 (例外メッセージ):
最初のアプローチの例外: テキスト '2016-12-09 09:30:21 UTC' を解析できませんでした: TemporalAccessor から ZonedDateTime を取得できません: {HourOfAmPm=9, MinuteOfHour=30, MicroOfSecond=0, SecondOfMinute=21, NanoOfSecond= 0, MilliOfSecond=0},ISO,UTC は java.time.format.Parsed タイプの 2016-12-09 に解決されました
2 番目のアプローチの例外: テキスト '2016-12-09 09:30:21 UTC' を解析できませんでした: TemporalAccessor から ZonedDateTime を取得できません: {HourOfAmPm=9, MinuteOfHour=30, MicroOfSecond=0, SecondOfMinute=21, NanoOfSecond= 0, MilliOfSecond=0},ISO,UTC は java.time.format.Parsed タイプの 2016-12-09 に解決されました
JDK バージョン 1.8.0_111
zoneddatetime タグで同様の質問を読みましたが、問題の解決策が見つかりませんでした。