2

我的代码的输出是 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

4 回答 4

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);

}
于 2013-03-12T08:17:47.250 回答
1

minusSeconds并返回DateTimeplusSeconds的副本。

您需要重新分配变量:

dt3 = dt3.minusSeconds(10);
dt4 = dt4.plusSeconds(10);
于 2013-03-12T08:18:31.327 回答
1

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

dt3 = dt3.minusSeconds(10);
dt4 = dt4.plusSeconds(10);
于 2013-03-12T08:19:05.647 回答
0

编辑了我的问题中的代码以考虑数年而不是秒数(见下文)。这很容易让我们看看当我们做 addYears( - Some big int ) 时是否有 -ve 时间。我们得到一个负值,这在数学上是可以的,但在现实生活中没有使用。

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);


}
于 2013-03-12T08:35:30.100 回答