Как вычесть 2 даты java.sql.Date?

Я вставляю некоторые данные в базу данных 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);

person Иван Бишевац    schedule 05.08.2011    source источник
comment
Разница между 2011-8-6 и 2011-8-6 на самом деле равна 0. Кстати, поскольку данные, по-видимому, хранятся в БД, есть ли причина, по которой вы не используете для этого SQL?   -  person BalusC    schedule 06.08.2011
comment
Поскольку вы должны использовать базу данных для вычисления этого, я бы сказал, что этот вопрос является дубликатом заголовка stackoverflow.com/questions/289680/. Если по какой-то причине вам должно выполняться вычисления на Java, так и скажите. Затем загляните в Joda-Time. :)   -  person Ray Toal    schedule 06.08.2011
comment
@BalucC Извините, это был ляпсус калами, я отредактировал это.   -  person Иван Бишевац    schedule 06.08.2011
comment
К вашему сведению, проект Joda-Time сейчас находится в режим обслуживания, при этом команда рекомендует перейти на java.time. См. учебник Oracle.   -  person Basil Bourque    schedule 19.04.2018


Ответы (2)


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

person Michael-O    schedule 06.08.2011

Если вам нужно количество календарных дней (Period на языке 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.sql.Date Java 8. API)

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

person Josiah Yoder    schedule 17.08.2017