Date And Time APIの日時クラス
Date And Time APIの日時クラスをまとめる。
Java | Java SE 8 |
Date And Time APIの日時クラスのまとめ。クラス数も増えたがDate・Calendarに比べ表現豊かになった。
日時クラスにおける接頭辞
Date And Time APIにおける日時クラスは、接頭辞によって時差のサポートする範囲を判断できる。
接頭辞 | 概要 |
---|---|
LocalXXX |
時差をサポートしない |
OffsetXXX |
UTCからの時差のみをサポート |
ZonedXXX |
タイムゾーンをサポートする |
日時クラス

クラス | 概要 |
---|---|
LocalDateTime |
時差をサポートしない日時クラス |
OffsetDateTime |
時差のみをサポートする日時クラス |
ZonedDateTime |
タイムゾーンをサポートする日時クラス |
日時を表すクラスは3種類あり、時差のサポートする範囲がそれぞれ違う。
LocalDateTimeは、ISO8601における時差のない歴日付及び地方時に対応する。JavaDocにもあるが(時差表示のない)壁がけ時計のイメージ。日時は表現されているが、どの時差かはわからない。見る人が暗黙的に判断する。時差をサポートしないので時差情報を持たない。
OffsetDateTimeは、ISO8601における時差を持つ歴日付及び地方時に対応する。LocalDateTimeにZoneOffsetを加えた形。ZoneOffsetは時差。
ZonedDateTimeは、ISO8601にはなくDate And Time API独自のモノでタイムゾーンに対応する日時クラス。ZoneOffsetに加え、ZoneIdも保持する。クラスとしてはZoneIdになっているが実質はZoneRegionの実装クラスで、これがタイムゾーンにおける夏時間などの情報を持っている。
時差クラス

クラス | 概要 |
---|---|
ZoneId |
時差及びタイムゾーンを表現するクラス。ファクトリも提供。 |
ZoneOffset |
時差を表現するクラス。 |
ZoneRegion |
タイムゾーンを表現するクラス。(パッケージプライベート) |
ZoneIdが時差及びタイムゾーンを表現するクラスになるが、abstractなのでZoneOffsetかZoneRegionが具体クラスになる。ただし、ZoneIdがファクトリメソッドを提供するので、そこまで意識する必要は無い。特にZoneRegionはパッケージプライベートなので直接扱うことすらできない。
ZoneIdのof()メソッドに「地域名/地名」「時差」などを渡すことでZoneIdは生成可能。システムのデフォルトを取得したい場合はsystemDefault()メソッドを利用する。
ZoneId asiaTokyoZoneId = ZoneId.of("Asia/Tokyo");
ZoneId utcZoneId = ZoneId.of("UTC");
ZoneId offsetZoneId = ZoneId.of("+09:00");
ZoneId defaultZoneId = ZoneId.systemDefault();
日付と時刻クラス

クラス | 概要 | フォーマット |
---|---|---|
LocalDate |
時差をサポートしない日付クラス。 |
YYYY-MM-DD |
LocalTime |
時差をサポートしない時刻クラス。ナノ秒まで対応。 |
hh:mm:ss.s |
OffsetTime |
UTCからの時差付き時刻クラス。ナノ秒まで対応。 |
hh:mm:ss.sZ |
日付と時刻を表すためのクラス。いままでのDateとは違い、日時クラスから分離して「日付」「時刻」だけで表現可能になった。
年月日クラス

クラス | 概要 | フォーマット |
---|---|---|
Year |
年を表すクラス。 |
YYYY |
YearMonth |
年月を表すクラス。 |
YYYY-MM |
MonthDay |
月日を表すクラス。 |
--MM-DD |
Month |
月を表す列挙型。 |
|
DayOfWeek |
曜日を表す列挙型。 |
年月日など表すためのクラス。「Year」「YearMonth」「MonthDay」はISO8601の下位省略や上位省略に対応する。「Month」「DayOfWeek」は「月」「曜日」を表す列挙型で、ISO8601の「歴月」「歴日」に対応する。
Appendix A: 参考
Appendix B: 改訂履歴
-
v1.0, 2016-07-09: 初稿