0

我正在使用下面的代码,但得到了不应该的 -ve 值!..

Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(2013, 10, 31, 23, 00);

ctim=calendar.getTimeInMillis();//system time at shut down


calendar.clear();
calendar.set(2013, 11, 1, 1, 00);
long cTime = calendar.getTimeInMillis();//system time at restart
timediff = cTime-ctim;

我不知道它有什么问题..??!!

4

1 回答 1

3

这就是问题所在。Java 中的月份表示为 0-11,而不是 1-12。Javadocs 的Calendar.MONTH说法:

get 和 set 的字段编号,指示月份。这是特定于日历的值。公历和儒略历中的第一个月是 JANUARY,即 0;最后一个取决于一年中的月数。

所以第一个被解释为 11 月 31 日或 12 月 1 日(Calendar默认情况下 s 是“宽松的”),因为 11 月有 30 天。第二个日期也被解释为 12 月 1 日。

SimpleDateFormat因此,当使用of打印出来时,这两次"yyyy-MM-dd HH:mm:ss"是:

2013-12-01 23:00:00
2013-12-01 01:00:00

这是负 22 小时的差异,对应于-79200000您获得的毫秒数。

1从您输入的月份中减去:

calendar.set(2013, 9, 31, 23, 00);  // 9 here is October

calendar.set(2013, 10, 1, 1, 00);   // 10 here is November

你会得到积极的改变。

于 2013-10-10T15:47:33.547 回答