これはバグや機能ですか?
DateTimeFormatter
Javadocは、明示的に、私が使用したときと述べているOOOO
私のフォーマッタでパターンを、完全な形ローカライズタイムゾーンのは(強調鉱山)を使用する必要があります。
4つの文字は、「、GMTなど、オフセットテキストをローカライズされ、完全な形、出力する2桁の時間と分のフィールドと 00 『:GMT + 08、例えば、任意の第二のフィールドゼロ以外の場合、および結腸を』。
しかし、場合には時間がGMT + 0であります:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS OOOO");
String timestamp = OffsetDateTime.ofInstant(Instant.now(), ZoneOffset.UTC).format(formatter);
System.out.println(timestamp);
これが出力されます。
Mon 2019.02.25 22:30:00.586 GMT
予想:
Mon 2019.02.25 22:30:00.586 GMT+00:00
バグ?私たちは、観測された行動は、文書に同意しない(あるいは、少なくともあなたはそれを一致させるためにドキュメントの非常に創造的な読み取りを行う必要があります)ことに同意しているようです。
機能?私の知る限り、観察された行動を言うことができるようにいくつかの点で意識的な決定です。民間の内部クラスのソースコードLocalizedOffsetIdPrinterParser
の内部にはDateTimeFormatterBuilder
含まif (totalSecs != 0) {
時間、分、秒を印刷する前に。まったく同じコード行がファイルにどこもあるので、それはコピー&ペーストエラーのように見えない(0オフセット多くの場所で特別に処理されますが、私はどこにも認識していないよ、それは完全に除外されます)。
Javaの8フォーマットパターンでOOOO
もないパースGMT
を単独でもGMT+00:00
バグでなければなりません。これは、Java 11上のJava 11に固定されますOOOO
パースGMT
彼らは(それが解析し、この許容を検討している必要がありますので、一人でうまくGMT+00:00
およびGMT-00:00
かかわらず、あまりにも)。
あなたは、Oracleおよび/またはOpenJDKの(私はこれらの日右の場所がわからないよ)でバグを提出検討することができます。彼らは、それを拒否する文書を修正したり、コードを修正するかどうか - 私は推測しようとしないであえて。
回避策:「GMT'xxx
何とか00:とにかく、私は00をしたいです。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE yyyy.MM.dd HH:mm:ss.SSS 'GMT'xxx");
水2019年2月27日08:46:43.226 GMT + 00:00