我正在计算两个sql日期TripStartDate
和TripEndDate
之间的差异
如果TripStartDate= 2011-03-04 09:35:00
和TripEndDate = 2011-03-04 10:35:00
那么我应该得到的天数为1(因为当天的行程发生了)。
像这样:
如果TripStartDate = 2011-03-04 09:35:00
和TripEndDate = 2011-03-05 09:35:00
那么方法应该返回2天(因为这两天都发生了旅行)。
如果TripStartDate = 2011-03-04 09:35:00
和TripEndDate = 2011-04-04 09:35:00
,则方法应返回32天。 (因为3月28天和4月4天)。
计算应仅基于日期和月份(不考虑时间)。请帮我 。提前谢谢......
答案 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