我正在尝试计算日期时差,但我得到了一些奇怪的结果: 这是来源:
import java.util.Calendar;
import java.util.Collections;
import java.util.Vector;
public class Main {
static Calendar dcal = Calendar.getInstance();
static Calendar ccal = Calendar.getInstance();
public static void main(String[] args) {
dcal.set(2011, 1, 27);
ccal.set(2011,2,1);
long dtime = dcal.getTimeInMillis();
long ctime = ccal.getTimeInMillis();
long diff = ctime - dtime;
int hours = (int) (diff / (1000 * 60 * 60));
System.out.println("hours->"+hours);
}
}
当我将ccal设置为2011年1月31日时,日期差异为96小时,但是当我将其设置为2011年2月1日时 日期差异是48小时。怎么会这样?什么是补救措施?
谢谢,
埃利奥特
答案 0 :(得分:6)
如果您设置ccal,那么“ccal.set(2011, 1, 31)
”日期实际上是2001年3月3日,因为几个月基于零并且日历默认滚动。所以48小时(96-48)的差异是正确的,因为3月1日(set(2011,2,1)
)和3月3日(set(2011,1,31)
)之间有两天。
答案 1 :(得分:4)
你知道几个月是0,对吗?因此,0表示1月,1表示2月,因此2011年1月31日不存在。实际上最好不要使用数字,而是使用几个月的Calendar常量,即:Calendar.JANUARY。要亲自了解正在发生的事情,请打印日历各自的日期:
ccal.set(2011, 1, 31);
System.out.println(ccal.getTime());