[解決済み] java.util.Dateをjava.time.LocalDateに変換する。
質問
を変換する最も良い方法は何ですか?
java.util.Date
オブジェクトを新しいJDK 8/JSR-310の
java.time.LocalDate
?
Date input = new Date();
LocalDate date = ???
解決方法は?
簡単な答え
Date input = new Date();
LocalDate date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
説明
その名前とは裏腹に
java.util.Date
は時間軸上の一瞬を表し、quot;date" ではありません。このオブジェクトに格納されている実際のデータは
long
1970-01-01T00:00Z (1970年GMT/UTC開始の深夜) からのミリ秒のカウント。
と同等のクラスです。
java.util.Date
は、JSR-310 では
Instant
という便利なメソッドがあります。
toInstant()
を使用して、変換を行うことができます。
Date input = new Date();
Instant instant = input.toInstant();
A
java.util.Date
インスタンスにはタイムゾーンの概念がありません。これは、もしあなたが
toString()
の上で
java.util.Date
というのは
toString
はタイムゾーンに対する相対値です。しかし、このメソッドは実際にはJavaのデフォルトのタイムゾーンをその場で使用して文字列を提供します。タイムゾーンは、実際には
java.util.Date
.
An
Instant
は、タイムゾーンの情報も含んでいない。したがって
Instant
をローカルな日付に変換するには、タイムゾーンを指定する必要があります。これは、デフォルトのゾーンであるかもしれません。
ZoneId.systemDefault()
- あるいは、ユーザー設定のタイムゾーンなど、アプリケーションが制御するタイムゾーンを指定することもできます。タイムゾーンは
atZone()
メソッドを使用して、タイムゾーンを適用します。
Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
A
ZonedDateTime
は、ローカルの日付と時刻、タイムゾーン、GMT/UTCからのオフセットからなる状態を含んでいます。そのため、日付は
LocalDate
- を使えば、簡単に抽出することができます。
toLocalDate()
:
Date input = new Date();
Instant instant = input.toInstant();
ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
LocalDate date = zdt.toLocalDate();
Java 9の回答
Java SE 9 では 新メソッド が追加され、この作業が若干簡略化されました。
Date input = new Date();
LocalDate date = LocalDate.ofInstant(input.toInstant(), ZoneId.systemDefault());
この新しい選択肢は、より直接的で、ゴミの発生も少ないので、より良いパフォーマンスを発揮するはずです。
関連
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] java.lang.UnsupportedClassVersionError を修正する方法。サポートされていないメジャー.マイナーバージョン
-
[解決済み] スタックトレースを文字列に変換するにはどうすればよいですか?
-
[解決済み] 2つの日付範囲が重なっているかどうかを判定する
-
[解決済み] Java文字列→日付変換
-
[解決済み] Java 8 StreamをArrayに変換する方法は?
-
[解決済み] LocalDateTimeで日付をパース/フォーマットする方法は?(Java 8)
-
[解決済み】java.time.LocalDate を java.util.Date 型に変換する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
エラー java.util.NoSuchElementException
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
java.lang.NoClassDefFoundError: org.apache.jasper.el.ELContextImpl クラスを初期化できませんでした。
-
[解決済み] LocalDateからjava.util.Dateへの変換、およびその逆の最も単純な変換?[重複している]。
-
[解決済み] java.time.LocalDateTimeとjava.util.Date間の変換について
-
[解決済み】java.time.LocalDate を java.util.Date 型に変換する。
-
[解決済み】ミリ秒単位の長いエポック時間からJava 8 LocalDateを作成するにはどうすればよいですか?
-
[解決済み] Javaで誰かの年齢を計算するにはどうしたらいいですか?
-
[解決済み] LocalDateをInstantに変換する方法は?