Joda Api处理时区isBefore Not isAfter Now比较

时间:2012-12-16 01:52:34

标签: java datetime timezone jodatime

  

我想检查给定的DateTime是在当前之前还是之后   约会时间。我正在将输入时间和当前时间转换为常见时间   时区(比如UTC)并比较DateTime。但我偶然发现了乔达   Api,因此我很想知道Joda是否有能力做到这一点   没有时区转换。例如:

clientDateTime.isBeforeNow()

1 个答案:

答案 0 :(得分: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);

输出:

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