ThreeTen backport 正式リリース

Date and Time API (JSR 310) のリファレンス実装を提供している ThreeTen Porject が JDK7 向けのバックポート・ライブラリ ThreeTen backport を正式リリースしたと発表しました。

JSR 310 は JDK6 時代から存在する古参のワーキンググループで、当初 JDK7 へのマージを目標に JDK6 ベースで開発していた経緯から、オリジナルの Date and Time API の使い勝手を損なうことなく JDK7 へのバックポートが行われました。

ThreeTen backport はオリジナルと比較するとトップレベルのパッケージが java.time でなく org.threeten.bp に変更されている点や、JDK8 の新文法 (主にデフォルトメソッド) への代替としてクラス設計の一部が変更になっていますが、その他はほぼオリジナルと同じ感覚で使用できます。

一応念のために記しておきますが、ThreeTen backport 自体は BSD ライセンス (修正 BSD ライセンス) のオープンソースです。

ThreeTen backport をプロジェクトで使用したい場合は、Maven なら pom.xml に以下の依存関係を追加してください。

<dependency>
  <groupId>org.threeten</groupId>
  <artifactId>threetenbp</artifactId>
  <version>1.0</version>
</dependency>

今回、正式リリースするに当たって、リリース直前ですが大きな変更がありました。

  • ThreeTen backport の動作環境は JDK7 でしたが、あるコントリビューターの尽力により JDK6 でも動作するようになりました。JDK7 と JDK6 は本質的なところでは大きな差はないので、動作環境の幅を広げるという意味では良い判断だと筆者は感じています (この期に及んで JDK6 をサポートする是非は別として)。
  • ThreeTen backport 独自の機能として DateTimeUtils クラスが追加されました。これは JDK7 以前が Date and Time API とのインタフェースを一切持たないことへの対応です。筆者は Date and Time API と既存の Date/Calendar との相互変換ユーティリティーを早急に準備した方が良いと主張してきましたが、今回 ThreeTen backport に追加された DateTimeUtils は良い参考になるとみています。

Date and Time API は仕様が大きすぎるなどの批判はありますが、元となっている ISO 8601 の煩雑さに比べればよく整理された API だと感じています。特に日付・時刻の操作に関しては従来の Date/Calendar とは比較にならないほど改善されていますので、今すぐ JDK8 を試せないという不幸な方々は、是非 ThreeTen backport を用いてその機能を活用してみてください。