35

我正在处理与这里所问的非常相似的事情 -比较 Joda-Time 时区,但它似乎对我不起作用。

这是我正在测试Joda-Time DateTime的一段代码-

 DateTime estDT = new DateTime(DateTimeZone.forID("America/Puerto_Rico")).withMillisOfSecond(0); 
 DateTime londonDT = new DateTime(DateTimeZone.forID("Europe/London")).withMillisOfSecond(0);

    System.out.println("Comparison " + londonDT.isBefore(estDT)); 
    System.out.println("Comparison " + londonDT.isAfter(estDT)); 

有趣的是,我从上面的两个 sysout 语句中都得到了“假”。谁能解释一下进行这种比较的正确方法是什么?

4

2 回答 2

61

isAfterisBefore方法按毫秒比较日期(忽略时区)。

在您的示例中,日期的毫秒数相等。

System.out.println(londonDT.getMillis() == estDT.getMillis());  

将打印true

表达式

londonDT.isBefore(estDT) 
londonDT.isAfter(estDT)

等于

londonDT.getMillis() < estDT.getMillis()  
londonDT.getMillis() > estDT.getMillis()
于 2013-06-20T10:59:57.350 回答
18

您正在创建两个 DateTime 实例,它们可能代表同一时间点,但时区不同。两者都不是在另一个之前或之后。

时区只影响日期/时间方法如何getHourOfDay()转换瞬间。

于 2013-06-18T15:25:51.327 回答