Таблицы (MS Excel, Google Apps) представляют даты в виде количества целых дней с 1 января 1900 года (возможно, предостережение 29 февраля в случае Excel ).Итак, это 365 дней, за исключением високосных лет.Но это уже слишком большая арифметика.
Предположительно, java.util.[Gregorian]Calendar
знает все это.Проблема в том, что я не знаю, как получить доступ к его знаниям.
В спекулятивном мире можно:
myGcalEarlier.set(1900, Calendar.JANUARY, 1);
myGcalLater.set(new Date());
long days1 = myGcalEarlier.mysteryMethod();
long days2 = myGcalLater.mysteryMethod();
long days = days2 - days1;
К сожалению, Calendar.get(Calendar.DAYS_IN_YEAR)
не удовлетворяет для 'mysteryMethod''- для того, что я хочу, потребуется поле Calendar.DAYS_EVER
.
Существует ли API для получения точной разницы, выраженной в календарных днях ?
Примечания
Мне действительно нужны календарные дни, а не дни из 86400 секунд.Помимо часовых поясов и перехода на летнее время (спасибо @Dipmedeep), необходимо учитывать високосные годы.В этих условиях 31536000 секунд - это 365 дней.3 из 4 лет, которые получают меня с 1 января по 1 января.Но на 4-м году я получаю только с 1 января по 31 декабря, получая 1-дневную ошибку каждые 4 года!
У меня уже есть решение для получения количества календарных дней.Это тривиальный фрагмент кода для перехода на Java, и он получает желаемый ответ (хотя я не понимаю его и поэтому не доверяю ему).Этот вопрос специально задает (теперь даже больше после редактирования), могу ли я вообще избежать этих вычислений и перенести их в «доверенную» библиотеку в JDK.До сих пор я пришел к выводу «нет».