Как вычесть 2 даты java.sql.Date? - PullRequest
3 голосов
/ 06 августа 2011

Я вставляю некоторые данные в базу данных Sqlite и проверяю перед вставкой, существует ли уже запись для этого дня.Чтобы проверить это, я должен увидеть, если количество дней> 0.Например, разница (в днях) между 2011-8-6 и 2011-8-5 равна 1. Как сделать это в Java?

РЕДАКТИРОВАТЬ: Как упоминалось @RayToal, это может быть сделано в базе данных, поэтому ясделал на этом пути:

SELECT julianday('now') - julianday(Date(Date)) from VIDEO_HISTORY;

Единственная проблема с этим заключается в том, что он дает мне десятичное число.Например: 3.3442346529103816 Теперь я должен решить внутри Java, если данное число 3 из 4 дней.Этот код предназначен для приложения, которое ищет в YouTube какой-то термин и записывает статистические данные о ежедневных просмотрах в базу данных.Пользователь может планировать работу, например, каждый день в 20:00.Но затем он мог решить перенести эту работу на 10:00, поэтому программа должна понять, что разница в один день.Так что очевидно, что мне нужно округлить до первого большего числа.Есть какой-то метод для этого, или я должен написать сам?

EDIT2: По ссылкам, предоставленным @ Michael-O, это лучшее решение (с использованием JodaTime):

DateTime start = new DateTime(new GregorianCalendar(2011, 8, 4).getTime());
DateTime end = new DateTime(new GregorianCalendar(2011, 8, 8).getTime());

int numberOfDays = Days.daysBetween(start.toDateMidnight(), end.toDateMidnight()).getDays();
System.out.println(numberOfDays);

Ответы [ 2 ]

3 голосов
/ 06 августа 2011

Вы можете обратиться к этому учебнику. Более того, вы должны рассмотреть возможность использования Joda Time Period и проконсультироваться с этим ответом по stackoverflow.

2 голосов
/ 18 августа 2017

Если вы хотите количество календарных дней ( Период на языке java.time), то используйте (в Java 8):

import java.time.temporal.ChronoUnit;
import java.time.LocalDate;
ChronoUnit.DAYS.between(LocalDate.parse(from.toString()),LocalDate.parse(to.toString())

(Это позволяет избежать незначительной ошибки в Java 8 java.sql.Date API)

Если вы хотите Продолжительность в днях (физически прошедшее время в 24-часовых единицах), тогда используйте Подход Марсело.

...