Как получить Точную разницу в днях между двумя датами в Java или Groovy? - PullRequest
3 голосов
/ 04 марта 2011

Я вычисляю разницу между двумя датами 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 дня.(потому что 28 марта в марте и 4 дня в апреле).

Расчет должен быть основан только на датах и ​​месяце года (без учета времени).Пожалуйста, помогите мне .Заранее спасибо ...

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

К вашему сведению, в 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 голосов
/ 04 марта 2011

В 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);

РЕДАКТИРОВАТЬ Удивительно для меня, что ^ code действительно не всегда работает ... очевидно, есть некоторые «високосные секунды», которые портят математику.В комментариях уже предложено достаточно ссылок.Я бы пошел с библиотекой времени joda .

0 голосов
/ 15 августа 2014

Вот обычный способ сделать это в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...