logo

Java の日付と時刻

java.time、java.util、java.sql、および java.text パッケージには、日付と時刻を表すクラスが含まれています。 Java で日付を扱うには、次のクラスが重要です。

Java 8 日付/時刻 API

Java では、Java 8 以降、新しい日付と時刻 API が導入されました。java.time パッケージには、Java 8 の日付と時刻クラスが含まれています。

従来の日付/時刻 API

ただし、古典的または古い Java Date API も便利です。従来の日付と時刻クラスのリストを見てみましょう。

日付と時刻の書式設定

Java では、次のクラスを使用して日付と時刻をフォーマットできます。

Java 日付と時刻 API

Java は、java.time および java.util という 2 つのパッケージを利用して日付と時刻の機能を提供します。パッケージ java.time は Java 8 で導入され、新しく導入されたクラスは従来の java.util.Date クラスと java.util.Calendar クラスの欠点を克服しようとします。

古典的な日付時刻 API クラス

Java 8 リリース前の主なクラスは次のとおりです。

arpコマンド

Java.lang.システム: このクラスは、現在時刻をミリ秒単位で返す currentTimeMillis() メソッドを提供します。 1970 年 1 月 1 日からの現在の日付と時刻がミリ秒単位で表示されます。

java.util.Date: 特定の瞬間をミリ秒単位で示すために使用されます。

java.util.Calendar: これは、インスタンス間で変換し、さまざまな方法でカレンダー フィールドを操作するためのメソッドを提供する抽象クラスです。

java.text.SimpleDateFormat: これは、事前定義された方法またはユーザー定義のパターンで日付をフォーマットおよび解析するために使用されるクラスです。

java.util.TimeZone: これはタイムゾーンのオフセットを表し、夏時間も計算します。

既存の日付/時刻 API の欠点

    スレッドの安全性:Date や Calendar などの既存のクラスは、スレッド セーフを提供しません。したがって、デバッグが困難な同時実行性の問題が発生し、開発者が対処する必要があります。 Java 8 の新しい Date and Time API はスレッド セーフを提供し、不変であるため、開発者による同時実行の問題を回避します。不適切な API 設計:従来の日付 API とカレンダー API には、基本的な日常機能を実行するメソッドが提供されていません。 Java 8 で導入された Date クラスと Time クラスは ISO 中心であり、日付、時刻、期間、および期間に関する操作を実行するためのさまざまなメソッドを多数提供します。難しいタイムゾーンの処理:従来の Date クラスと Calendar クラスを使用してタイムゾーンを処理することは、開発者がロジックを記述することになっているため、困難です。新しい API を使用すると、Local API と ZonedDate/Time API を使用してタイムゾーンの処理を簡単に行うことができます。

Java 8 の新しい日時 API

新しい日付 API は、従来のクラスに関する上記の欠点を克服するのに役立ちます。これには次のクラスが含まれます。

java.time.LocalDate: これは ISO カレンダーの年-月-日を表し、時刻のない日付を表すのに役立ちます。生年月日や結婚日など、日付のみの情報を表すために使用できます。

java.time.LocalTime: 時間内のみの対応となります。これは、映画の上映時間や地元の図書館の開館時間と閉館時間など、人間ベースの時刻を表すのに役立ちます。

java.time.LocalDateTime: タイムゾーンなしで、日付と時刻の両方を処理します。これは LocalDate と LocalTime を組み合わせたものです。

java.time.ZonedDateTime: LocalDateTime クラスと ZoneId クラスで指定されたゾーン情報を組み合わせます。これは、タイムゾーン情報とともに完全な日付タイムスタンプを表します。

java.time.OffsetTime: タイム ゾーン ID を使用せず、グリニッジ/UTC からの対応するタイム ゾーン オフセットで時間を処理します。

java.time.OffsetDateTime: タイム ゾーン ID なしで、グリニッジ/UTC からの対応するタイム ゾーン オフセットを使用して日付と時刻を処理します。

java.time.Clock : 任意のタイムゾーンでの現在の瞬間、日付、時刻へのアクセスを提供します。 Clock クラスの使用はオプションですが、この機能を使用すると、他のタイムゾーン、または時間が変化しない固定クロックを使用してコードをテストできます。

java.time.Instant : これはタイムライン上のナノ秒の開始 (EPOCH 以降) を表し、マシン時間を表すタイムスタンプを生成するのに役立ちます。エポックの前に発生する瞬間は負の値を持ち、エポックの後に発生する瞬間は正の値を持ちます。

java.time.Duration : 2 つの瞬間の差は秒またはナノ秒で測定され、年、月、日などの日付ベースの構成要素は使用されませんが、このクラスは日、時間、分に変換するメソッドを提供します。

java.time.Period : これは、日付ベースの値 (年、月、日) の日付間の差異を定義するために使用されます。

java.time.ZoneId : タイムゾーン識別子を記述し、Instant と LocalDateTime の間で変換するためのルールを提供します。

java.time.ZoneOffset : グリニッジ/UTC 時間からのタイム ゾーン オフセットを記述します。

java.time.format.DateTimeFormatter : さまざまな定義済みフォーマッタが用意されていますが、独自のフォーマッタを定義することもできます。日付時刻値を解析してフォーマットするための parse() または format() メソッドがあります。