计算日期(以毫秒为单位)的代码是:
//installment date converted to milliseconds
long localDateInstall = installDate.getTime();
//installment date converted to milliseconds
long localDatePay = payDate.getTime();
这里我计算这些日期之间的天数:
days=Math.abs((localDatePay - localDateInstall))/86400000;
当我想测试它时,我输入 1/Jan/2012
作为 localDateInstall
并输入 1/Feb/2012
作为 localDatePay
。结果是:29 天。问题是什么?谢谢
最佳答案
反例:
public static void main(String[] args) throws Exception {
SimpleDateFormat format = new SimpleDateFormat("d MMM yyyy");
Date installDate = format.parse("1 Jan 2012");
Date payDate = format.parse("1 Feb 2012");
long localDatePay = payDate.getTime();
long localDateInstall = installDate.getTime();
long days = Math.abs(localDatePay - localDateInstall) / 86400000;
System.out.println(days);
}
这工作正常,输出是“31”,正如预期的那样。问题出在你没有告诉我们的地方。在黑暗中拍摄:您可能正在像这样构建测试输入:
Date installDate = new Date(2012, 1, 1);
Date payDate = new Date(2012, 2, 1);
遗憾的是,这在两个方面是错误的。首先,“年份”参数应该是“the year minus 1900”。二、January is month 0, not month 1 。将这两个日期作为输入,您确实会得到答案 29,因为您实际上是在询问 3912 年 2 月的天数,这是一个闰年。
关于java - 为什么 Java 的 Date.getTime() 返回一月份的错误响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10569381/