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はJCPのJSR 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について紹介していきます。