Java SE 8でProject Lambdaの次に注目される機能といえば、「Date and Time API」でしょう。

 今まで日時に関するAPIとしては、java.util.Dateクラスとjava.util.Calendarクラスを中心としたクラス群が提供されてきました。ただ、読者のみなさんも経験があると思いますが、DateクラスとCalendarクラスはいろいろと使いづらい点が多くあります。

 時間間隔を表すことができないことや、日時に関する演算の種類が少ないなど、機能的に足りていない部分も多くあります。

 これに対し、Date/Calendarクラスを置き換えるAPIが、Java SE 8で導入されたDate and Time APIです。

 Date and Time APIはJCPJSR 310として仕様策定が行われました。スペックリードは3人いますが、中心になっているのはStephen Colebourne氏です。Colebourne氏といえばJoda-Timeという日時に関するライブラリの作者でもあります。

 このような成り立ちをしているDate and Time APIですが、Date/Calendarクラスとの違いはどこにあるのでしょうか。

 両者の最も大きな違いは、Date/CalendarクラスがUNIX時間をベースにしているのに対し、Date and Time APIが「ISO 8601」をベースにしている点です。

 基準が異なるため、単純にDate/CalendarクラスからDate and Time APIに置き換えるわけにはいきません。

 UNIX時間とISO 8601では日時の扱いにさまざまな違いがあります。Date and Time APIを使いこなすためには、ISO 8601を理解しておく必要があります。そこで、今回はDate and Time APIのベースとなっているISO 8601について紹介していきます。