4

指定された DateTime が現在の DateTime の前後にあるかどうかを確認したい。入力時刻と現在時刻を共通のタイム ゾーン (UTC など) に変換し、DateTime を比較していました。しかし、私は Joda Api に出くわしたので、Joda がタイムゾーン変換なしでこれを行うことができるかどうか知りたいと思っていました。例:

clientDateTime.isBeforeNow()
4

1 に答える 1

8

はい、Joda DateTimeと現在の時刻との比較には、タイムゾーンの変換は必要ありません。

DateTime.isBeforeNowおよびなどの現在の時刻と比較する場合DateTime.isAfterNow、Jodaは、1970年1月1日以降の基になる絶対ミリ秒を単純に比較します。同じ時刻は、タイムゾーンに関係なく、まったく同じ絶対ミリ秒値を持ちます。

たとえば、インスタント1355625068295は次のように対応します。

DateTime dt = new DateTime(1355625068295L);

DateTime utc = dt.withZone(DateTimeZone.UTC);
DateTime ny = dt.withZone(DateTimeZone.forID("America/New_York"));
DateTime tk = dt.withZone(DateTimeZone.forID("Asia/Tokyo"));

System.out.println(utc.getMillis() + " is " + utc);
System.out.println(ny.getMillis() + " is " + ny);
System.out.println(tk.getMillis() + " is " + tk);

出力:

1355625068295 is 2012-12-16T02:31:08.295Z
1355625068295 is 2012-12-15T21:31:08.295-05:00
1355625068295 is 2012-12-16T11:31:08.295+09:00

そして「今」と比較すると:

System.out.println("now: " + new DateTime().getMillis());
System.out.println(ny.isBeforeNow());
System.out.println(ny.plusHours(1).isAfterNow());
System.out.println(tk.isBeforeNow());
System.out.println(tk.plusHours(1).isAfterNow());

出力:

now: 1355625752323
true
true
true
true
于 2012-12-16T02:45:14.833 に答える