Использую ORMLite c SQLite. Надо задать выборку данных по заданному интервалу для поля типа Date. Создаю 4 даты:
DateTime dateTime1 = DateTime.parse("2016-01-01", DateTimeFormat.forPattern("yyyy-MM-dd"));
DateTime dateTime2 = DateTime.parse("2016-02-01", DateTimeFormat.forPattern("yyyy-MM-dd"));
DateTime dateTime3 = DateTime.parse("2016-03-01", DateTimeFormat.forPattern("yyyy-MM-dd"));
DateTime dateTime4 = DateTime.parse("2016-04-01", DateTimeFormat.forPattern("yyyy-MM-dd"));
thirdLatestDate = dateTime1.toDate();
secondLatestDate = dateTime2.toDate();
latestDate = dateTime3.toDate();
nextDate = dateTime4.toDate();
Создаю по одному элементу с каждой из дат и записываю в БД. Проверяю, что все 4 лежат там. Затем пытаюсь сделать выборку с интервалом:
EventOrmModel.COLUMN_NAME_DATE + " BETWEEN '" +
dateFormat.format(startDate) + "' AND '" + dateFormat.format(endDate)
если startDate null, то условие BETWEEN не добавляется и я получаю все 4 элемента, но если я ставлю даты, то все время получаю на 1 элемент меньше, чем должно быть. Причем это даже не зависит от того, равна ли endDate дате последнего элемента или на месяц больше. Я все время недополучаю последний элемент, подходящий под интервал. Например, я задаю даты так: startDate равна дате самого раннего элемента, а endDate больше, чем последняя. Я получаю 3 элемента вместо 4-х. D Как правильно задать звпрос? Кстати, тот же результат получается, если вместо between я использую условия больше startDate и меньше endDate.
dateFormat вот такой:
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
После новой серии тестов выяснилось, что не хватает все-таки первого элемента, то есть с самой ранней датой. Может быть, что between берет не ">=", а только ">" ?
Оказалось, что Between использует для начала интервала условие ">"б для конца "<=". Странно, но так оно почему-то работает. Если нужно получить также данные, дата которых равна нижней границе, достаточноНадо провести такую операцию с датой:
dateFormat.format(new Date(startDate.getTime() -1))
Виртуальный выделенный сервер (VDS) становится отличным выбором