以毫秒为单位计算日期的代码是:
//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天。问题是什么?感谢
答案 0 :(得分:13)
反示例:
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月的天数,这是闰年。
答案 1 :(得分:0)
您可以尝试:
//installment date converted to milliseconds
long localDateInstall=installDate.getTimeInMillis();
//installment date converted to milliseconds
long localDatePay=payDate.getTimeInMillis();
long diff = localDatePay-localDateInstall;
long diffInDays = diff / (24 * 60 * 60 * 1000);
答案 2 :(得分:0)
我不认为有足够的信息可以继续,但这里有一些想法。
您正在执行整数运算,它不会舍入,而是截断一整天。如果您当天的结束时间比开始时间早一点,那么您将失去一整天。
确保时区没有任何有趣的事情发生。两个日期是以相同的方式输入,还是来自可能有不同时区的不同来源?
如果您发布每个的实际毫秒值以及预期的时区,则应该很容易确定两者中的哪一个已关闭。