Joda Api处理isBeforeNow的时区是在AfterNowNow比较之后

AkD*_*AkD 4 java timezone datetime jodatime

我想检查给定的DateTime是否在当前DateTime之前或之后.我将输入时间和当前时间转换为公共时区(比如UTC)并比较DateTime.但我偶然发现了Joda Api,因此我很想知道Joda是否能够在没有时区转换的情况下做到这一点.例:

clientDateTime.isBeforeNow()
Run Code Online (Sandbox Code Playgroud)

cam*_*ecc 7

是的,Joda DateTime与当前时间的比较不需要时区转换.

当与当前时间比较时,例如DateTime.isBeforeNowDateTime.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);
Run Code Online (Sandbox Code Playgroud)

输出:

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
Run Code Online (Sandbox Code Playgroud)

与"现在"比较时:

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());
Run Code Online (Sandbox Code Playgroud)

输出:

now: 1355625752323
true
true
true
true
Run Code Online (Sandbox Code Playgroud)