1. ホーム
  2. java

[解決済み] Javaで現在の日付/時刻を取得する方法 [重複]について

2022-03-06 11:17:24

質問

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

どのように解決するのですか?

どのような日付/時刻の形式が必要かによります。

  • 日付/時刻を1つの数値で表したい場合は、次のようになります。 System.currentTimeMillis() は、UNIXエポックからのミリ秒数で表現されます (これは、Javaの long ). この値は UTC タイムポイントからの差分であり、ローカルのタイムゾーンには依存しません。 1 .

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

    • new Date() を与える。 Date オブジェクトを現在の日付/時刻で初期化します。 問題なのは Date APIメソッドのほとんどは欠陥があり......そして非推奨となっています。

    • Calendar.getInstance() を与える。 Calendar オブジェクトは現在の日付/時刻で初期化され、デフォルトの LocaleTimeZone . その他のオーバーロードでは、特定の Locale および TimeZone . カレンダーは動くが・・・APIが面倒なのは変わらない。

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

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

Java 8以前は、これらのことを知るほとんどの人が、以下のことを推奨していました。 ジョダタイム は、タイムポイントや継続時間の計算を含むことを行うための最高のJava APIを持っているとして(断然)。

Java 8 以降では、標準の java.time パッケージの使用を推奨します。 Joda timeは現在quot;obsolete"とみなされており、Jodaのメンテナは移行を推奨しています。 3 .


1 - System.currentTimeMillis() は、システム時刻を表します。 システムクロックは(公称)UTCに設定されるのが普通ですが、ローカルUTCクロックと真のUTCの間には差(デルタ)が生じます。 この差の大きさは、システムの時計がUTCとどれだけうまく同期しているか(そしてどれだけ頻繁に同期しているか)に依存します。
2 - LocalDateTimeは、タイムゾーンを含まないことに注意してください。 javadocに書いてあるように オフセットやタイムゾーンなどの追加情報なしには、時間軸上のある瞬間を表すことはできません。
3 - 注意:移行しなくても、あなたのJava 8コードは壊れませんが、Jodaコードベースはいずれバグフィックスや他のパッチを受けなくなる可能性があります。 2020-02 現在、Joda の公式な "end of life" は発表されていませんし、Joda API は Deprecated としてマークされていません。