如何在Joda Time中正确比较DateTime或MutableDateTime对象?

时间:2013-03-12 08:16:05

标签: java jodatime

我的代码输出是0,0,0。我期待0,-1,1代替。代码中有什么问题?为什么我不能在DateTime中添加或减去秒?

public static void main(String[]args){

    DateTime dt1 = new DateTime();    
    DateTime dt2 = new DateTime(dt1); // dt2 = dt1
    DateTime dt3 = new DateTime(dt1); // dt3 < dt1
    DateTime dt4 = new DateTime(dt1); // dt4 > dt1

    dt3.minusSeconds(10);
    dt4.plusSeconds(10);

    int result1 = dt1.compareTo(dt2);
    int result2 = dt1.compareTo(dt3);
    int result3 = dt1.compareTo(dt4);

    System.out.println("Results " + result1 + " , " + result2 + " , " + result3);

}

4 个答案:

答案 0 :(得分:6)

minusSeconds()返回DateTime对象的副本。

你可以试试这个:

public static void main(String[]args){

    DateTime dt1 = new DateTime();    
    DateTime dt2 = new DateTime(dt1); // dt2 = dt1
    DateTime dt3 = new DateTime(dt1).minusSeconds(10); // dt3 < dt1
    DateTime dt4 = new DateTime(dt1).plusSeconds(10); // dt4 > dt1

    int result1 = dt1.compareTo(dt2);
    int result2 = dt1.compareTo(dt3);
    int result3 = dt1.compareTo(dt4);

    System.out.println("Results " + result1 + " , " + result2 + " , " + result3);

}

答案 1 :(得分:1)

minusSecondsplusSeconds会返回DateTime的副本。

您需要重新分配变量:

dt3 = dt3.minusSeconds(10);
dt4 = dt4.plusSeconds(10);

答案 2 :(得分:1)

DateTime 不可变。执行dt3.minusSeconds(10);后,DateTime引用的dt3对象不会被修改;相反,它返回一个新的DateTime对象。将您的代码更改为:

dt3 = dt3.minusSeconds(10);
dt4 = dt4.plusSeconds(10);

答案 3 :(得分:0)

编辑我的问题中的代码需要花费数年而不是秒(见下文)。这很容易让我们看看当我们做addYears时得到的时间( - 一些大的int)。我们得到的负值在数学上是可以的,但在现实生活中并没有使用。

public static void main(String[]args){

    DateTime dt1 = new DateTime();    
    DateTime dt2 = new DateTime(dt1); // dt2 = dt1
    DateTime dt3 = new DateTime(dt1); // dt3 < dt1
    DateTime dt4 = new DateTime(dt1); // dt4 > dt1
    MutableDateTime mdt1 = new MutableDateTime(dt1); // mdt1 = dt1
    mdt1.addYears(-10);

    dt3 = dt3.minusYears(10);
    dt4 = dt4.plusYears(10);

    int result1 = dt1.compareTo(dt2);
    int result2 = dt1.compareTo(dt3);
    int result3 = dt1.compareTo(dt4);

    System.out.println("Results " + result1 + " , " + result2 + " , " + result3);
    System.out.println("IMmutable is " + dt1);
    System.out.println("mutable is " + mdt1);

    mdt1.addYears(-10000);
    System.out.println("mutable is " + mdt1);


}