4

我想检查给定的日期时间是在当前日期时间之前还是之后。我正在将输入时间和当前时间转换为公共时区(比如 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 回答