Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.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_Date_Jodatime - Fatal编程技术网

如何获得两个java日期之间的天数,比较日期和时间

如何获得两个java日期之间的天数,比较日期和时间,java,date,jodatime,Java,Date,Jodatime,我尝试使用以下代码计算两个java date对象之间的天数: public static int daysBetweenDates(Date startDate, Date endDate) { return Days.daysBetween( new LocalDate(startDate.getTime()), new LocalDate(endDate.getTime())).getDays(); } 我在这里用的是乔达时间。但我的问题是,当我比较两个日

我尝试使用以下代码计算两个java date对象之间的天数:

public static int daysBetweenDates(Date startDate, Date endDate)
    {
        return Days.daysBetween( new LocalDate(startDate.getTime()), new LocalDate(endDate.getTime())).getDays(); 
    }

我在这里用的是乔达时间。但我的问题是,当我比较两个日期时,例如:2016年4月11日星期一09:04:00 IST和2016年4月13日星期三11:04:00 IST,结果是2。事实上,我期望的结果是3,因为给定日期之间的间隔超过2天。有没有办法做到这一点。

这里绝对不需要使用Joda time或java.time。一天是86400*1000毫秒。Java日期在Posix历元中以UTC毫秒表示当前时间。所以

long diffMillis = endDate.getTime() - startDate.getTime();
int deltaDays = (int) Math.ceil(diffMillis / (86400.0 * 1000.0));
在天与天之间,强调我的:

创建一个天数,表示两个日期之间的天数 指定的部分日期时间

因此,只需检查是否有剩余,如果有,则增加:

LocalDateTime now = new LocalDateTime();
LocalDateTime then = now.minusDays(2).minusMinutes(5);
int numberOfDaysBetween = Days.daysBetween(then, now).getDays();
LocalDateTime fullDayTime = then.plusDays(numberOfDaysBetween);
if (fullDayTime.isBefore(now)) {
    numberOfDaysBetween++;
}

结果应该是numberofdays,介于3之间,因为现在是2天零5分钟。

你是说你希望结果向上取整,而不是向下取整?@David Wallace,如果结束时间与开始时间不一样,您可以直接在结果中添加一个。请注意,如果您对子日期时间跨度感兴趣,则不应使用LocalDate-LocalDate会删除开始和结束日期的时间组件,留下确切的天数。LocalDateTime包括时间,但删除时区,而DateTime还确保保留时区。在这种情况下,我可能会使用DateTime。很好的一点,@dimo414-以及为什么在我的答案中的示例中使用LocalDateTime而不是LocalDate。但是一天不一定是86400000毫秒。夏时制开始时,我们每天有23小时;夏时制结束后,我们一天有25个小时。Joda和java.time库在计算中考虑了这一点。如果你不使用其中的一个,你很可能会大错特错。这取决于你如何定义一天。在本地时间中,应用时区偏移时,午夜到午夜之间的时间段可能包含23、24或25小时,具体取决于是否发生转换。但是,在UTC中,没有时区偏移,因此一天总是86400秒。