JSR310だからThreeTenって呼ばれてるみたい。会社で「ThreeTenがさー」て言ったらうざがられそうだけど積極的に使っていきたい!
「Date and Time APIとラムダ式ハンズオン」な関ジャバの勉強会を7/11(SAT)に楽天大阪で開催しますよ!
kanjava.connpass.com
ということで。 @khasunuma さんのブログを読んで、Java8 の Date and Time API を予習しようー。
前提
僕はjoda-timeが好きです。特にImmutableなところが好き。あとtoStringがISO8601なところも好き。
そしてDate and Time APIはあんまり知らないです。
Javaの日付と時刻周りの歴史背景
java.util.Date
とjava.util.Calendar
とjava.sql.Date
とXMLGregorianCalendar
で混乱するよね。
レビューするときには「パッケージ間違えてないか」「月が0-11になってるか」「タイムゾーンの扱いは?」とか気になりますね。
あと、おまけで「setLenientどうしてるか?」も。
てことで、Javaの日付と時刻周りの歴史背景から。
Date and Time API (1) -- Java SE 8 時代の日付と時刻の扱い方 - Programming Studio
Calendar.Builder
とかできたのね。便利そう。
っていっても Calendar.getInstance()
より new GregorianCalendar()
でいいやと思うので、あんまり関係ないけど(怒られそうー)。
java.util.Date―その悲劇と歴史 - Programming Studio
色々不満を言われても、手を加えずに過去の互換性を大切にしてくれてるおかげで僕は楽をできてるので。ありがたいです。トレードオフってことですね。
もう既にあんまり Date
とか Calendar
使ってなくて。joda-timeの DateTime
を使ってるので。
Date and Time APIに移行したいと思えるかどうか。ってところかなー。
ISO8601
ISO 8601 -- Date and Time API の基礎理論(1) - Programming Studio
ISO 8601 -- Date and Time API の基礎理論(2) - Programming Studio
'T'とか'Z'とか出てきてなにこれー?ってなったときにISO8601のさわりだけ勉強したなー。+0900なのか+09:00なのかとかも。
これは知っておく方が良いね。
そういえば、元号はJava6から対応してて、プロパティファイルに書いてあった記憶がある。
将来的に変わるときには、そこが更新されるんだろうな。それかとりあえず自分で書き足すか。 日本人的にこの話をするのは憚られてしまいますが。
Date and Time API の LocalDate
Date and Time API (2) -- Date and Time API の基礎 - Programming Studio
さて、いよいよこっからがDate and Time APIの話ですね。まずは LocalDate
。
[Tips] Calendar では、例えば 2014 年 2 月 30 日を指定してインスタンスを作成すると、2014 年 3 月 2 日として解釈されました。一方、Date and Time API では無効な日付を指定することができません。
ほほー。
of メソッドは LocalDate を返します。すなわち、of によるインスタンス作成を起点として、メソッド・チェーンで日付に対する操作を行うことができます。
メソッドチェーン便利よね。
あー。朝勉強時間のタイムアップだ。明日また LocalDate
から見ていこう。