白猫のメモ帳

C#とかJavaとかJavaScriptとかHTMLとか機械学習とか。

LocalDate#ofの引数はゼロ埋めしないよ

こんばんは。

急に涼しくなっていまいち体調が悪いです。
しかもまた暑くなるとか・・・無理・・・。


さて、Java8でDate/Time APIが刷新されて使いやすくなりました。
ローカライズされた日付を扱いたいときにはLocalDateクラスを使います。

parseメソッドを使ってLocalDateを作成するとこうなります。

LocalDate date = LocalDate.parse("2016-09-22");

ちゃんとゼロ埋めをしないと例外が発生してしまいます。

LocalDate date = LocalDate.parse("2016-9-22"); // DateTimeParseException


ofメソッドを使うとint型の引数からLocalDateを作成できます。

LocalDate date = LocalDate.of(2016, 9, 22);

こっちもせっかくだから0埋めしてあげると・・・

LocalDate date = LocalDate.of(2016, 09, 22);

こんなエラーが出ます。

整数09が大きすぎます

えっ。
ちなみに1月~7月まではうまくいきます。


なぜこんなことになるかというと、int型は先頭に0をつけると8進数になります。
(ちなみに0xをつけると16進数に、0bをつけると2進数になります。)

なので、

System.out.println(011);

の出力結果は

9

になります。


この仕様ややこしくない…?