我正在尝试编写函数来查找两个日期之间的日差,它工作正常,但结果会在相同的输入中更改一些时间。请说当前日期是21/7/2014,结果有一段时间是567和其他时间566。
代码:
//TO GET THE CURRENT DATE
Calendar cal = Calendar.getInstance();
//THE CAL.ADD BECUSE THE 1ST MONTH IN THE YEAR IS 0 NOT 1
cal.add(Calendar.MONTH, 1);
//TO SET THE START DATE WICH IS 1/1/2013
Calendar startDate=Calendar.getInstance();
startDate.set(Calendar.DAY_OF_MONTH, 1);
startDate.set(Calendar.MONTH,1);
startDate.set(Calendar.YEAR, 2013);
//TO FIND THE DIFF BETWEEN THE START DATE AND CUREENT DATE , THE +1 BECUSE IT IS
ALWAYS LESS BY ONE DAY
long diff=(((cal.getTimeInMillis()-
startDate.getTimeInMillis())/(1000*60*60*24))+1);
答案 0 :(得分:0)
我认为这是因为以奇怪的方式完成了几个小时......
当我添加以下代码时,我似乎工作正常:
cal.set(Calendar.HOUR_OF_DAY, 1);
startDate.set(Calendar.HOUR_OF_DAY, 1);
答案 1 :(得分:0)
这里的问题是当您实例化日历时,您将获得当前的日期和时间。因此,当您忽略时间值时,它会完美运行。
两个比较两个日期最好使用Date类和java并使用以下代码 因此,您的上述代码可以重写为
Date cal = new Date(114, 7, 21); //Date is 21/7/2014
Date startDate = new Date(113, 1, 1); Date is 1/1/2013
long newdiff = ((cal.getTime()-startDate.getTime())/(1000*60*60*24));
System.out.println(newdiff);
这次它将正确打印566(实际差异为566)
问题实际上是假设您正在比较今天的日期和明天的日期。
即21/7/2014和22/7/2014。天数的差异是一个。如果您在午夜12:00运行程序,您将获得1.并且在此之后的任何其他时间它将导致0.这是因为获得当前时间和日期