TL; DR
は
ZonedDateTime.now() // Capture the current moment as seen through the lens of wall-clock time used by the people of a certain region, a time zone. Better to pass the expected/desired time zone as an optional argument.
.minusHours(24) // Do the math, get earlier moment.
java.timeに取って代わられ、今のレガシーあるのJavaの最初のバージョンにバンドルCalendar
面倒Calendar
クラスと関連する日付時刻クラスは、使用しないでください。クラス。
java.time
時間帯は日付を決定する上で重要です。任意の瞬間について、日付は地球の周りでゾーンごとに異なります。たとえば、Paris Franceの真夜中の数分後には、新しい日がありますが、まだ「昨日」はMontréal Québecです。
タイムゾーンが指定されていない場合、JVMは現在のデフォルトタイムゾーンを暗黙的に適用します。そのデフォルトはいつでも変更される可能性がありますので、結果は異なる場合があります。期待どおりのタイムゾーンを明示的に引数として指定する方がよいでしょう。
は、America/Montreal
、Africa/Casablanca
、又はPacific/Auckland
として、continent/region
の形式でproper time zone nameを指定します。 EST
またはIST
のような3〜4文字の略語は、ではなく、のように、標準化されておらず、ユニークではない(!)と使用しないでください。
ZoneId z = ZoneId.of("America/Montreal") ;
キャプチャする現在の瞬間をZonedDateTime
オブジェクトとして要求するときは、そのタイムゾーンを使用します。
ZonedDateTime zdt = ZonedDateTime.now(z) ;
JVMの現在のデフォルトタイムゾーンを使用する場合は、それを求めて引数として渡します。省略すると、JVMの現在のデフォルトが暗黙的に適用されます。明示的にすることをお勧めします。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
目標の時間数を減算します。
ZonedDateTime zdtMinus24h = zdt.minusHours(24) ;
ZonedDateTime zdtMinus48h = zdt.minusHours(48) ;
ZonedDateTime zdtMinus72h = zdt.minusHours(72) ;
はisBefore
、isAfter
、およびisEqual
方法と比較してください。また、Comparable
が実装されています。
また、追加する時間数をDuration
として表すこともできます。
Duration d = Duration.ofHours(24) ;
ZonedDateTime zdtEarlier = zdt.minus(d) ;
についてjava.time
java.timeフレームワークは、Java 8に組み込まれており、後にされています。これらのクラスは、java.util.Date
、Calendar
、& SimpleDateFormat
などの面倒な古いlegacy日時クラスに取って代わります。
maintenance modeにあるJoda-Timeプロジェクトは、java.timeクラスへの移行を推奨しています。
詳しくはOracle Tutorialをご覧ください。そして、多くの例と説明のためにStack Overflowを検索してください。仕様はJSR 310です。
ここで、java.timeクラスを取得するには?
ThreeTen-Extraプロジェクトでは、追加のクラスでjava.timeを拡張します。このプロジェクトは、将来のjava.timeへの追加の可能性を証明する土台です。ここでは、Interval
、YearWeek
、YearQuarter
、moreなどの便利なクラスがあります。
72時間、または78時間? –