[解決済み] LocalDateからjava.util.Dateへの変換、およびその逆の最も単純な変換?[重複している]。
質問
を簡単に変換する方法はありますか?
LocalDate
(Java 8 で導入された) を
java.util.Date
オブジェクトを作成しますか?
シンプル」というのは、これよりもシンプルという意味です。
Date date = Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
というのは、私には少しぎこちないように思えます。
我々は日付の部分にしか興味がなく、どちらのオブジェクトにもタイムゾーンの情報はないので、なぜ明示的にタイムゾーンを導入するのでしょうか?真夜中の時刻とシステムのデフォルトのタイムゾーンを暗黙のうちに変換に利用すべきです。
どのように解決するのですか?
tl;dr
<ブロッククオートLocalDate (Java 8 で導入) を java.util.Date オブジェクトに変換する簡単な方法はありますか?簡単な」というのは、次のような意味です。
いや。ちゃんと、できるだけ簡潔にやってくれましたね。
java.util.Date.from( // Convert from modern java.time class to troublesome old legacy class. DO NOT DO THIS unless you must, to inter operate with old code not yet updated for java.time.
myLocalDate // `LocalDate` class represents a date-only, without time-of-day and without time zone nor offset-from-UTC.
.atStartOfDay( // Let java.time determine the first moment of the day on that date in that zone. Never assume the day starts at 00:00:00.
ZoneId.of( "America/Montreal" ) // Specify time zone using proper name in `continent/region` format, never 3-4 letter pseudo-zones such as “PST”, “CST”, “IST”.
) // Produce a `ZonedDateTime` object.
.toInstant() // Extract an `Instant` object, a moment always in UTC.
)
問題点は以下を読んで、考えてみてください。どうすればもっとシンプルになるのか?ある日付が何時から始まるかと聞かれたら、「どこですか」と聞く以外に答えようがないだろう?パリ(フランス)の夜明けはモントリオール(カリフォルニア)より早く、コルカタ(インド)ではさらに早く、オークランド(ニュージーランド)ではさらに早く、すべて異なる瞬間です。
そのため、日付のみの変換で(
LocalDate
) を日付時刻に変換します。
は
タイムゾーンを適用する (
ZoneId
)を取得し、ゾーン化された値(
ZonedDateTime
)、UTCに移行する(
Instant
)の定義と一致するように
java.util.Date
.
詳細
まず、以下のような古いレガシーな日付時刻クラスは避けてください。
java.util.Date
可能な限り。これらは貧弱な設計で、混乱しやすく、厄介なものです。これらのクラスが java.time クラスに取って代わられたのには理由があります。
多く
という理由があります。
しかし、どうしても必要な場合は、java.time型と旧型との間で変換することができます。古いクラスに追加された新しい変換メソッドを探してみてください。
java.util.Date
→
java.time.LocalDate
を覚えておいてください。
java.util.Date
は、日付を表すので誤記です。
プラス
をUTCで表したものです。これに対して
LocalDate
クラスは日付のみの値を表し、曜日や時間帯は含まれない。
からの移行
java.util.Date
をjava.timeに変換するということは、同等のクラスである
java.time.Instant
. その
Instant
クラスは、タイムライン上のある瞬間を
UTC
の解像度で
ナノ秒
(小数点以下9桁まで)。
Instant instant = myUtilDate.toInstant();
は
LocalDate
クラスは日付のみの値を表し、曜日やタイムゾーンは含まれない。
日付を決定する上で、タイムゾーンは非常に重要である。どのような瞬間であっても、日付はゾーンによって世界中に変化します。たとえば、午前0時から数分後に パリ フランス ではまだ「昨日」ですが、新しい日です。 モントリオール ケベック州 .
そこで、その
Instant
をタイムゾーンに変換します。そこで
ZoneId
を取得するために
ZonedDateTime
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( z );
そこから、日付指定でお願いする
LocalDate
.
LocalDate ld = zdt.toLocalDate();
java.time.LocalDate
→
java.util.Date
から、反対方向に移動すること。
java.time.LocalDate
から
java.util.Date
は、日付のみから日付時刻にすることを意味します。ですから、時間帯を指定しなければなりません。おそらく、その日の最初の瞬間を狙いたいのでしょう。次のようにします。
ではなく
とする
00:00:00
. 夏時間のような変則的な場合、最初の瞬間は次のような別の時間になる可能性があります。
01:00:00
. java.timeにその値を決定させるには、次のように呼び出します。
atStartOfDay
の上で
LocalDate
.
ZonedDateTime zdt = myLocalDate.atStartOfDay( z );
ここで
Instant
.
Instant instant = zdt.toInstant();
変換する
Instant
を
java.util.Date
を呼び出すことで
from( Instant )
.
java.util.Date d = java.util.Date.from( instant );
詳細情報
について java.time(ジャバタイム
は
java.time
フレームワークは、Java 8以降に組み込まれています。これらのクラスは、面倒な古い
レガシー
のような日付時間クラスがあります。
java.util.Date
,
Calendar
, &
SimpleDateFormat
.
さらに詳しく知りたい方は オラクルチュートリアル . また、Stack Overflowで検索すると、多くの例や解説が見つかります。仕様書は JSR 310 .
は ジョダタイム プロジェクトは、現在 メンテナンスモード への移行を推奨しています。 Java.time クラスがあります。
を交換することができます。
java.time
オブジェクトを直接データベースとやり取りすることができます。データベースと直接接続するには
JDBCドライバ
に準拠した
JDBC 4.2
またはそれ以降であること。文字列は必要ありません。
java.sql.*
クラスがあります。Hibernate 5 & JPA 2.2サポート
java.time
.
java.timeクラスはどこで手に入りますか?
-
Java SE 8
,
Java SE 9
,
Java SE 10
,
Java SE 11
以降 - 標準のJava APIの一部で、バンドルされている実装があります。
- ジャバ9 は、いくつかのマイナーな機能と修正をもたらしました。
-
Java SE 6
と
Java SE 7
- ほとんどの java.time(ジャバタイム の機能は、Java 6 & 7 にバックポートされています。 スリーテンバックポート .
-
アンドロイド
- Androidの後期バージョン(26以上)では、このバンドルに java.time クラスがあります。
-
以前のAndroid(<26)では、以下のような処理が行われていました。
APIデスガリング
をもたらす。
のサブセットです。
java.time
の機能は、もともとAndroidに組み込まれていないものです。
- デスガリングで必要なものが提供されない場合は スリーテンABP プロジェクトが適応する スリーテン-バックポート (前述)をAndroidに移植しました。参照 ThreeTenABPの使用方法... .
は
スリーテン・エキストラ
プロジェクトは、java.time を追加クラスで拡張します。このプロジェクトは、将来java.timeに追加される可能性のあるもののための実験場です。ここには、次のような便利なクラスがあります。
Interval
,
YearWeek
,
YearQuarter
および
もっと
.
関連
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
プロジェクトの依存関係を解決できなかった 解決
-
xxx:jarのアーティファクトディスクリプタの読み込みに失敗した問題は解決しました。
-
自動配線された依存性のインジェクションに失敗しました。
-
linux run jarfile Invalid or corrupt jarfile error.
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
Google Chromeのエラー「Not allowed to load local resource」の解決策について
-
[解決済み] java.time.LocalDateTimeと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 Exceptionが発生しました エラー解決
-
Android Studio 3.1.2 で v4, v7 パッケージが見つからない シンボル 'AppCompatActivity' を解決できない
-
Spring BootのテストメソッドFailed to load ApplicationContextの問題を解決する
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
[解決済み] java.util.Dateをjava.time.LocalDateに変換する。
-
[解決済み] java.time.LocalDateTimeとjava.util.Date間の変換について
-
[解決済み】java.time.LocalDate を java.util.Date 型に変換する。
-
[解決済み】Java。Dateコンストラクタはなぜ非推奨なのですか、そして代わりに何を使えばいいのですか?
-
[解決済み】AndroidプロジェクトでThreeTenABPを使用する方法
-
[解決済み】今日の午前0時と明日の午前0時のJava日付オブジェクトを作成する方法は?