如何在java或groovy中获得两个日期之间的完全日差异?

时间:2011-03-04 06:29:20

标签: java groovy

我正在计算两个sql日期TripStartDateTripEndDate之间的差异 如果TripStartDate= 2011-03-04 09:35:00TripEndDate = 2011-03-04 10:35:00那么我应该得到的天数为1(因为当天的行程发生了)。

像这样:

如果TripStartDate = 2011-03-04 09:35:00TripEndDate = 2011-03-05 09:35:00那么方法应该返回2天(因为这两天都发生了旅行)。

如果TripStartDate = 2011-03-04 09:35:00TripEndDate = 2011-04-04 09:35:00,则方法应返回32天。 (因为3月28天和4月4天)。

计算应仅基于日期和月份(不考虑时间)。请帮我 。提前谢谢......

3 个答案:

答案 0 :(得分:2)

在Java中,我猜你会减少时间并计算日差

Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.set(2011, 03, 04);
cal2.set(2011, 04, 04);
long milis1 = cal1.getTimeInMillis();
long milis2 = cal2.getTimeInMillis();
long diff = milis2 - milis1;
long days = diff / (24 * 60 * 60 * 1000);

编辑令我惊讶的是,^代码确实总是不起作用 ...显然有一些'闰秒'会弄乱数学。已经在评论中提出了足够多的链接。我会选择joda time library

答案 1 :(得分:2)

仅供参考,在Groovy中,这将是:

fourthMarch = Date.parse( 'yyyy-MM-dd', '2011-03-04' )
fifthMarch  = Date.parse( 'yyyy-MM-dd', '2011-03-05' )
fourthApril = Date.parse( 'yyyy-MM-dd', '2011-04-04' )

assert 2  == fifthMarch  - fourthMarch + 1
assert 32 == fourthApril - fourthMarch + 1

我们需要添加1,因为日期包含

答案 2 :(得分:0)

这是在Java 8中执行此操作的常用方法。

LocalDate start = LocalDate.of(2011, 3, 4);  // Or whatever - this is Y, M, D
LocalDate end = LocalDate.of(2011, 4, 4);
return ChronoUnit.DAYS.between(start, end) + 1; 
                                         // The +1 is for the inclusive reckoning