Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找日差的代码_Java_Android - Fatal编程技术网

Java 查找日差的代码

Java 查找日差的代码,java,android,Java,Android,我正在尝试编写函数,以查找两个日期之间的日差,结果正常,但在相同的输入中会发生一些时间变化。假设当前日期为2014年7月21日,结果一段时间为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

我正在尝试编写函数,以查找两个日期之间的日差,结果正常,但在相同的输入中会发生一些时间变化。假设当前日期为2014年7月21日,结果一段时间为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);

我认为这是因为时间以一种奇怪的方式循环

在我这方面,当我添加以下代码时,它似乎工作得很好:

cal.set(Calendar.HOUR_OF_DAY, 1);
startDate.set(Calendar.HOUR_OF_DAY, 1);

这里的问题是,当您实例化日历时,您得到的是当前日期和时间。因此,当您忽略时间值时,它可以完美地工作

比较两个日期最好使用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

问题是,假设你比较今天的日期和明天的日期


ie 2014年7月21日和2014年7月22日。天数的差别是一。如果您在午夜12:00运行该程序,您将获得1。在这之后的任何其他时间,它将导致0。这是因为获取当前时间和日期

可能重复的时间,他们确定使用Joda time是处理此问题的最佳方法。但是,这个解决方案很好地替代了使用Joda时间库:考虑到您的重播,我尝试了它,但它没有解决问题。考虑到,我尝试了它,但我得到了错误构造函数Dateint,int,int实际上是不推荐的,这只是一个警告,表明代码是旧的。。Calendar类取代了date类,但出于您的目的,最好使用date类,因为它更简单,更易于使用。我认为您的点击是有用的,我使用了GregorianCalendar,它现在可以正常工作了,考虑您的时间