为什么Java的Date.getTime()会返回1月份的错误响应?

AFF*_*AFF 2 java date

以毫秒为单位计算日期的代码是:

//installment date converted to milliseconds
long localDateInstall = installDate.getTime();

//installment date converted to milliseconds
long localDatePay = payDate.getTime();
Run Code Online (Sandbox Code Playgroud)

在这里我计算这些日期之间的天数:

days=Math.abs((localDatePay - localDateInstall))/86400000;
Run Code Online (Sandbox Code Playgroud)

当我想测试它,我进入1/Jan/2012localDateInstall1/Feb/2012localDatePay.结果是:29天.问题是什么?谢谢

Rya*_*art 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);
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,输出为"31",如预期的那样.问题出在你没告诉我们的地方.在黑暗中拍摄:您可能正在构建您的测试输入,如下所示:

Date installDate = new Date(2012, 1, 1);
Date payDate = new Date(2012, 2, 1);
Run Code Online (Sandbox Code Playgroud)

可悲的是,这在两个方面是错误的.首先,"年"论证应该是" 减去1900年的年份 ".其次,1月是0月,而不是1月.有了这两个日期作为输入,你的确会得到29的答案,因为你实际上要求的是它在3912年2月的天数,这是闰年.