ZonedDateTimeクラス(Java)で文字列出力時の問題

6月末だというのにもう完全に真夏日、いや猛暑日ですね。
これで7月、8月になったらどうなってしまうのか。正直憂鬱です。

さて本題ですが、今回はJavaの話。
ZonedDateTimeクラスに問題があった件について記載します。

このクラスは日時を扱うためのクラスであり、幅広く利用されています。
今回使っていたライブラリでも使用されていたのですが、テスト実施中に
たまたま問題が発覚しました。正直、運が良かったですね。

問題とは何なのかについて簡単に説明しますと、
「秒数に0が設定されている場合、文字列化すると省略されてしまう」です。

具体的には、以下となります。

String zonedDateTime = "2018-10-11T12:00:00Z";

ZonedDateTime z =  ZonedDateTime.parse(zonedDateTime);
System.out.println(z);  // return 2018-10-11T12:00Z

見事に秒の部分が消えていますね。

ログ出力などで使用するだけなら特に問題は無いのですが、
フォーマットを厳密にチェックする処理がある場合、エラー扱いされてしまいます。
今回はそれに引っ掛かりました。

このライブラリがオープンソースだったこともあり、
修正を実施することが出来たので事なきを得ましたが、
1/60の確率でエラーを吐かれるとか洒落になりませんね…。

以上