JAVA日期计算错误.?

Pri*_*ckZ 4 java date

这是我的代码片段.我需要从某个日期减去天数,但我没有得到我期望的结果:

public class TestingDates {

    public static void main(String[] args) {
        Date toDate=new Date();
        Date fromDate=new Date();
        for (int i = 0; i < 30; i++) {
            fromDate.setTime(toDate.getTime() - i * 24 * 60 * 60 * 1000);
            System.out.println(fromDate);   
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

而且我对这个结果感到困惑

这是输出

Fri Sep 13 12:24:50 IST 2013
Thu Sep 12 12:24:50 IST 2013
Wed Sep 11 12:24:50 IST 2013
Tue Sep 10 12:24:50 IST 2013
Mon Sep 09 12:24:50 IST 2013
Sun Sep 08 12:24:50 IST 2013
Sat Sep 07 12:24:50 IST 2013
Fri Sep 06 12:24:50 IST 2013
Thu Sep 05 12:24:50 IST 2013
Wed Sep 04 12:24:50 IST 2013
Tue Sep 03 12:24:50 IST 2013
Mon Sep 02 12:24:50 IST 2013
Sun Sep 01 12:24:50 IST 2013
Sat Aug 31 12:24:50 IST 2013
Fri Aug 30 12:24:50 IST 2013
Thu Aug 29 12:24:50 IST 2013
Wed Aug 28 12:24:50 IST 2013
Tue Aug 27 12:24:50 IST 2013
Mon Aug 26 12:24:50 IST 2013
Sun Aug 25 12:24:50 IST 2013
Sat Aug 24 12:24:50 IST 2013
Fri Aug 23 12:24:50 IST 2013
Thu Aug 22 12:24:50 IST 2013
Wed Aug 21 12:24:50 IST 2013
Tue Aug 20 12:24:50 IST 2013
Tue Oct 08 05:27:38 IST 2013
Mon Oct 07 05:27:38 IST 2013
Sun Oct 06 05:27:38 IST 2013
Sat Oct 05 05:27:38 IST 2013
Fri Oct 04 05:27:38 IST 2013
Run Code Online (Sandbox Code Playgroud)

请帮我解决这个问题

Mad*_*mer 12

你似乎想计算向后30天...你应该尝试使用Calendar替代

Calendar cal = Calendar.getInstance();
cal.setTime(toDate);
for (int i = 0; i < 30; i++) {
    cal.add(Calendar.DATE, -1);
    System.out.println(cal.getTime());
}
Run Code Online (Sandbox Code Playgroud)

  • @MichaelPiefel 1st Calendar位于默认库中; 第二,我认为Calendar通常比JodaTime更容易学习(考虑到API中的类数); 第3是的,JodaTime通常是一个更强大的API (2认同)

DRC*_*RCB 9

你面对整数溢出.int变量的最大值i2 ^ 31-1.

i变量使用long类型以避免溢出.

    for (long i = 0; i < 30; i++) {
        fromDate.setTime(toDate.getTime() - i * 24 * 60 * 60 * 1000);
        System.out.println(fromDate);   
    }
Run Code Online (Sandbox Code Playgroud)