Javaで現在の日付/時刻を取得する方法 [重複] 質問する

Javaで現在の日付/時刻を取得する方法 [重複] 質問する

Java で現在の日付/時刻を取得する最適な方法は何ですか?

ベストアンサー1

Java で現在の日付/時刻を取得する最適な方法は何ですか?

「最善」の方法はありません。

どのような形式の日付/時刻を希望するかによって異なります。

  • 日付/時刻を単一の数値として取得したい場合は、System.currentTimeMillis()UNIX エポックからのミリ秒数 (Java としてlong) として表現された日付/時刻を取得します。この値は UTC 時刻からの差分であり、ローカル タイム ゾーン1とは無関係です。

  • 日付/時刻の構成要素 (年、月など) に数値でアクセスできる形式で日付/時刻を取得したい場合は、次のいずれかを使用できます。

    • new Date()現在の日付/時刻で初期化されたオブジェクトが提供されますDate。問題は、DateAPI メソッドのほとんどに欠陥があり、非推奨になっていることです。

    • Calendar.getInstance()デフォルトのandCalendarを使用して、現在の日付/時刻で初期化されたオブジェクトが提供されます。他のオーバーロードを使用すると、特定のand/orを使用できます。Calendar は機能しますが、API はまだ扱いにくいです。LocaleTimeZoneLocaleTimeZone

    • new org.joda.time.DateTime()あなたに与えるジョダタイムデフォルトのタイムゾーンと年表を使用して、現在の日付/時刻で初期化されたオブジェクト。Joda の代替手段は他にもたくさんありますが、ここでは説明しきれません。(ただし、Joda の時間にパフォーマンス上の問題があると報告する人もいます。例:https://stackoverflow.com/questions/6280829.

    • Java 8 では、 を呼び出すjava.time.LocalDateTime.now()と、現在の日付/時刻の表現2java.time.ZonedDateTime.now()が返されます。

Java 8以前は、これらのことを知っているほとんどの人が推奨していたジョダタイム時点と期間の計算を伴う処理を実行するための (これまでのところ) 最高の Java API を備えていると言われています。

Java 8 以降では、標準java.timeパッケージが推奨されます。Joda time は現在「廃止」されているとみなされており、Joda のメンテナーは移行を推奨しています3


注: Calendarorg.joda.timeおよびjava.timeソリューションは、プラットフォームのデフォルトのタイムゾーン、またはコンストラクター引数で指定された明示的なタイムゾーンのいずれかを使用できます。一般に、デフォルトのゾーンではなく明示的なタイムゾーンを使用すると、アプリケーションの動作がより予測可能になり、(たとえば) 異なるタイムゾーンのデータ センターに再デプロイした場合に問題が発生しにくくなります。

しかし、何をするにしても、ユーザー、サービス、データ センターのタイムゾーンがすべて異なる可能性があることを (おそらくアプリケーションも) 認識しておく必要があります。「現在の日付/時刻」の概念は複雑です。


1 - System.currentTimeMillis()「システム」時間を示します。システム クロックを (公称) UTC に設定するのが通常の方法ですが、ローカル UTC クロックと実際の UTC の間には差 (デルタ) があります。デルタのサイズは、システムのクロックが UTC と同期されている程度 (および頻度) によって異なります。2
- LocalDateTime にはタイム ゾーンが含まれていないことに注意してください。javadoc には、「オフセットやタイム ゾーンなどの追加情報なしでは、タイムライン上の瞬間を表すことはできません」と記載されています。3
- 注: 移行しなくても Java 8 コードは壊れませんが、Joda コードベースは最終的にバグ修正やその他のパッチの取得を停止する可能性があります。2020 年 2 月現在、Joda の公式の「サポート終了」は発表されておらず、Joda API は非推奨としてマークされていません。

おすすめ記事