Как получить диапазон даты / времени для «сегодня», используя библиотеку даты / времени Joda в Java? - PullRequest
21 голосов
/ 29 июня 2011

Предполагая, что таким образом вы получаете текущее время в Время Joda :

DateTime now = new DateTime();

Как рассчитать значения для переменных dateTimeAtStartOfToday и dateTimeAtEndOfToday?

То, что я пытаюсь сделать, это сгенерировать некоторый SQL для поиска всех транзакций, которые произошли между startOfToday и endOfToday.

Ответы [ 6 ]

35 голосов
/ 29 июня 2011

Я бы использовал:

LocalDate today = now.toLocalDate();
LocalDate tomorrow = today.plusDays(1);

DateTime startOfToday = today.toDateTimeAtStartOfDay(now.getZone());
DateTime startOfTomorrow = tomorrow.toDateTimeAtStartOfDay(now.getZone());

Затем проверьте, если startOfToday <= time < startOfTomorrow для какого-либо конкретного времени.

Конечно, это отчасти зависит от того, что именно хранится в базе данных - и в какое времязона, в которой вы заинтересованы.

5 голосов
/ 30 июня 2011

Это работает лучше, оказывается, у DateTime есть метод toInterval, который делает именно это (вычисляет с полуночи до полуночи). В моих тестах, похоже, нет проблем с переходами DST.

DateTime now = new DateTime();
DateTime startOfToday = now.toDateMidnight().toInterval().getStart();
DateTime endOfToday = now.toDateMidnight().toInterval().getEnd();
System.out.println( "\n" + now + "\n" + startOfToday + "\n" + endOfToday + "\n" );

JODA выглядит очень хорошо продуманным.

1 голос
/ 19 сентября 2014
if((sinceDate.getDayOfYear() == now.getDayOfYear())  && (sinceDate.year() == now.year()))
   //yep, do something today;

у меня работает.

0 голосов
/ 26 апреля 2018

Как функция расширения Kotlin, она выглядит следующим образом:

fun DateTime.isOnSameDay(timeOnDayToCheck: DateTime) =
  timeOnDayToCheck.toLocalDate().toInterval(this.zone).contains(this)

Это не содержит времена, равные концу дня (начало включено), поэтому возможно добавьте"- чехол с interval.getEnd().isEqual(this)).

0 голосов
/ 29 июня 2011

Это работает ...

DateTime dt = new DateTime();
DateMidnight dtStartDate = dt.toDateMidnight();
DateMidnight dtEndDate = dt.plusDays( 1 ).toDateMidnight();
System.out.println( dt + "\n" + dtStartDate + "\n" + dtEndDate );

... но что касается SQL, я склонен использовать BETWEEN в качестве предложения where, а не использовать> и <= stuff </p>

0 голосов
/ 29 июня 2011
import org.joda.time.DateTime;
import org.joda.time.DateTimeMidnight;

DateTime dateTimeAtStartOfToday = new DateTime(new DateTimeMidnight());  
DateTime dateTimeAtEndOfToday = new DateTime((new DateTimeMidnight()).plusDays(1));
...