为什么Java';s Date.getTime()返回的一月响应不正确?
以毫秒为单位计算日期的代码为:为什么Java';s Date.getTime()返回的一月响应不正确?,java,date,Java,Date,以毫秒为单位计算日期的代码为: //installment date converted to milliseconds long localDateInstall = installDate.getTime(); //installment date converted to milliseconds long localDatePay = payDate.getTime(); 这里我计算了两个日期之间的天数: days=Math.abs((localDatePay - localDate
//installment date converted to milliseconds
long localDateInstall = installDate.getTime();
//installment date converted to milliseconds
long localDatePay = payDate.getTime();
这里我计算了两个日期之间的天数:
days=Math.abs((localDatePay - localDateInstall))/86400000;
当我想测试它时,我为localDateInstall
输入1/Jan/2012
,为localDatePay
输入1/Feb/2012
。结果是: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);
不幸的是,这在两个方面是错误的。首先,“年”的论点应该是“年”。第二将这两个日期作为输入,您确实会得到29的答案,因为您实际上是在询问3912年2月的天数,这是闰年。您可以尝试:
//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);
我不认为有足够的信息继续下去,但这里有一些想法可以追求
在您用来将这些日期映射到时间点的时区中,1月1日和2月1日之间是否会有夏令时调整?换言之,2012年1月该时区的任何一天都不是24小时吗?演示如何使用Joda time获取两个日期之间的天数。
getTime()
仅提供UTC的长时间戳我同意Mike的说法。它没有理由给你错误的值。如果你做的一切都是对的,DST可能是唯一可能的原因。夏令时(美国)于2012年3月11日(星期日)开始。1月1日和2月1日之间没有变化。除了不计算差异的绝对值外,这与已经发生的事情有什么不同?它计算的是1月份的天数,不应该受到闰年的影响。@phatfingers:再看一次我写的(下半部分)。哇,很对。我收回我的评论(并将对你的条目进行投票)。@NargesSalehnia:这不是一个很有帮助的评论。如果这是您问题的解决方案,请单击答案左侧的复选标记,将其标记为“已接受”。如果没有,请发布您自己的答案,解释问题的真正原因。我正在做这个dateTimeString=“2014-12-03 04:25:00”SimpleDataFormat SimpleDataFormat=new SimpleDataFormat(“yyyy-MM-dd H:m:s”,Locale.getDefault());Date Date=SimpleDataFormat.parse(dateTimeString);startTimeInMillis=date.getTime()代码>日期.getTime返回毫秒,即12月2日