Java8のLocalDateとLocalDateTimeを変換してみた

求人
Java8のLocalDateとLocalDateTimeを変換してみた

Java8からLocalDateクラスというのが追加されていて色々調べてみました。

インスタンス生成方法はLocalDate.ofを使って生成します。

デフォルトはyyyy-MM-dd形式になります。ofメソッドでleap year(うるう年)の判定もしてくれるのでnew LocalDate(2019,2,29);なんてするとエラーが発生します。

今の時間でLocalDateを生成するにはnow()メソッドを使用します。

LocalDateもLocalDateTimeもタイムゾーンがないのでOSの日時を変更するとその時刻が表示されます。

LocalDateTimeからLocalDateに変換する

LocalDateの加算減算

LocalDateに日数を加算したい減算したいというケースが出てくると思います。

その場合はplusDays(int)やminusDays(int)で加減算することができます。基本的に用意されているメソッドは同じです。LocalDateTimeは時分秒を加減算するメソッドがあります。

LocalDateとLocalDateを比較する

「2000年1月1日より未来日のデータを取得する」みたいな感じでLocalDate同士を比較するときがあると思います。

その場合はisAfterやisBeforeメソッドを使用します。

isAfterやisBeforeメソッドは同一日を含まないので、「2000年1月1日含む未来日のデータを取得する」という場合はequalsメソッドを併用しないと期待した動きとなりません。

日付フォーマットする

LocalDateもLocalDateTimeも日付フォーマットするには、DateTimeFormatterクラスを使用します。戻り値はString型になります。

parseメソッドを使用して日付フォーマットする

formatメソッドだとString型に変換されてしますので、LocalDate.parseメソッドを使用して日付フォーマットします。この場合は戻り値はLocalDate型になります。

良きに計らってくれるようですが、第一引数が文字列で動的に来ると考えると、エラーとしたい場合があると思います。

その場合はyyyyをuuuuに変更してwithResolverStyle(ResolverStyle.STRICT)メソッドを指定します。

DateTimeFormatterのhhとHHの違い

形式 表示
hh 1~12
HH 0~23

上記の通りです。hhは0~11ではなく1~12のようです。

23と指定するとエラーとならずに11になってしまいます。

HHで指定すると23は23として表示されます。

ちなみにこれをLocalDateTime.parseメソッドで行うとエラーとなります。

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA