現在日時を取得する方法
現在日時を取得するにはnow()
メソッドを使用します。
コンストラクタは用意されていないため、newすることはできません。
Date And Time APIライブラリでは文字列表現として「YYYY-MM-DD」形式を採用しています。
Java
文字列形式の日付を渡してLocalDateを生成する方法
文字列形式の日付を渡してLocalDateを生成するLocalDate#parse()を使用します。
Java
特定の日付を表すインスタンスの生成方法
特定の日付を表すインスタンスを生成するにはLocalDate
クラスのof()
メソッドを使用します。
of()
メソッドの引数には日付を表すint値もしくは、java.time.Month型列挙定数(月のみ)を指定します。
Java
コードの可読性を高めるため、月に関してはint値ではなく、Month型列挙定数を指定することが推奨されています。
列挙型定数を取得するには#getValue()メソッドを使用するのが望ましいです。これを用いれば1月~12月に対応した「1~12」のint値が返されます。
列挙型定数 曜日を表すDayOfWeek
と月を表すMonth
Java
ChronoUnit列挙型
日付や時間の単位を表すインターフェースの実装としてChronoUnit列挙型があります。
すべて単数形ではなく、複数形の単語であることに注意しよう。
SECONDS
は1秒の概念を表す単位HOURS
は1時間の概念を表す単位MINUTES
は1分の概念を表す単位DAYS
は1日の概念を表す単位WEEKS
は1週間の概念を表す単位MONTHS
は1か月の概念を表す単位YEARS
は1年の概念を表す単位
ChronoUnit
を引数に取る主なLocalDateTimeクラスのメソッド
メソッド | 説明 |
---|---|
boolean isSupported (TemporalUnit unit) | 指定されたフィールドがサポートされている場合はTrue 、サポートしていない場合はFalse を返す。 |
LocalDateTime minus(long amountTosubtract, TemporalUnit unit) | 指定された時間量を減算したLocalDateTimeのコピーを返す。 |
LocalDateTime plus(long amountToAdd, TemporalUnit unit) | 指定された時間量を加算したLocalDateTimeのコピーを返す。 |
LocalDateTime truncatedTo(TemporalUnit unit) | 時間を切り捨てたLocalDateTimeのコピーを返す。 |
long until(Temporal endExclusive, TemporalUnit unit) | もう一方のLocalDateTimeまでの時間量を指定された単位で計算する。 |
isSupported
の使用例は以下のとおりです。
Java
minus
の使用例は以下のとおりです。
Java
plus
の使用例は以下のとおりです。
Java
trunatedTo
の使用例は以下のとおりです。
Java
ChronoUnit.DAYS
を指定したので日付未満が切り捨てられて「T00:00」になりました。
until
の使用例は以下のとおりです。
Java
日付の比較(isBefore/isAfter/isEqual)
以下の3つのメソッドがあります。
boolean isBefore(ChronoLocalDateTime<?> other)
boolean isAfter(ChronoLocalDateTime<?> other)
boolean isEqual(ChronoLocalDateTime<?> other)
使用例は以下のとおりです。
Java
日時を表すオブジェクトから別のオブジェクトを取得する
Java
以下は情報を保持していないため実行時エラーになる例。
Java
TemporalUnitインターフェースが持つ計算用メソッド(addTo/between)
- addTo
- between
addTo
の使用例は以下のとおりです。
Java
between
の使用例は以下のとおりです。
Java
現在のタイムゾーンを取得する。
Java
時間の間隔を表すクラス
Data and Time API
では時間の間隔を表すクラスとして以下の2つがあります。
java.time.Duration
は、時間ベースで間隔を表すクラス。java.time.period
は、日付ベースで間隔を表すクラス。
基本的にはどちらのクラスもbetweenメソッドで「間隔」を取得してからメソッドを使う形になります。
Duration
クラスの主なメソッド
メソッド | 説明 |
---|---|
int getNano() | 間隔の秒内のナノ秒を取得する。 |
int getSeconds() | 間隔の秒数を取得する。 |
getNano
の使用例は以下のとおりです。
Java
しかし、秒が異なっていてもミリ秒が同じ値の場合、「0」で表示されてしまうので注意が必要。以下がその例。
Java
day1は56秒でday2は58秒なので秒数は異なりますが、ミリ秒がどちらも789ミリ秒で同じなので同じなので結果は「0」になります。
getSecond
の使用例は以下のとおりです。
Java
day1は56秒でday2は58秒で差分が2秒なので「2」が返ります。
第1引数>第2引数 であれば結果はマイナス値になります。
Java
Period
クラスの主なメソッド
メソッド | 説明 |
---|---|
int getDay() | 期間の日数を取得する。 |
int getMonths() | 期間の月数を取得する。 |
int getYears() | 期間の年数を取得する。 |
getDays()
,getMonths()
,getYears()
の使用例は以下のとおりです。
Java
年同士の比較、月同士の比較、日付同士の比較なので、1年過ぎていたからと言って月が13か月になったりはしません。
日時のフォーマット
日時の表示形式をフォーマットするにはjava.time.format
パッケージのDateTimeFormatter
クラスを使用します。
従来のSimpleDateFormat
はスレッドセーフではありませんでしたが、DateTimeFormatter
クラスは不変でスレッドセーフなので積極的に使っていきましょう。
フィールド | 説明 |
---|---|
BASIC_ISO_DATE | 基本的なISO日付 |
ISO_DATE | オフセット付き、またはオフセットなしのISO日付 |
ISO_LOCAL_DATE | ISOローカル日付 |
ISO_OFFSET_TIME | オフセット付きの時間 |
使用例は以下のとおり。
Java
独自のカスタムパターン
独自のカスタムパターンを指定してDateTimeFormatter
インスタンスを取得するにはofPattern
メソッドを使用します。
Java
エポック秒
java.time.Instant
クラスは、時系列上の単一時点を表すクラスです。
具体的には1970年1月1日午前0時0分0秒からの経過秒数(エポック秒)を保持しています。
(instantには「瞬間」という意味がある。)
機能 | 説明 |
---|---|
now()メソッド | Instantインスタンスを取得するファクトリ・メソッド |
instantクラスのstatic定数フィールドEPOCH |
エポック秒の起点を取得する。 |
toEpochSecond()メソッド | 現在の経過秒を取得する。long型を返す。 |
toEpochMilli()メソッド | 現在の経過ミリ秒を取得する。long型を返す。 |
(1年は31,536,000秒=60秒×60分×24時間×365日)
Java

以上で記事の解説はお終い!
もっとJavaやSpringを勉強したい方にはUdemyがオススメ!同僚に差をつけよう!