Привет, я получаю ниже проблемы при реализации логики для удаления 1 месяца старых документов из mongoDB. Ниже код и выход ...Запрос даты в MongoDb TimeZone issue
currDate = new Date(); // value is : Tue Nov 26 15:22:10 **EST** 2013
Calendar calDate = Calendar.getInstance();
calDate.setTime(new Date());
calDate.add(Calendar.MONTH,-1);
currDateMinusOneMonth = calDate.getTime(); // value is : Sat Oct 26 15:22:10 **EDT** 2013
Criteria c1 = Criteria.where("publishDate").lt(currDateMinusOneMonth);
Query query = new Query(c1);
logger.info("Query to find 1 month old documents: " + query.toString()); -->
{"publishDate" : { "$lt" : { "$date" : "2013-10-26T**19**:22:10.571Z"}}}
Как-то это добавляет 4 часа к времени в запросе. Не знаю, почему это происходит. Как мы можем избежать этого?
Когда я заменяю по следующим критериям
Criteria c1 = Criteria.where("publishDate").lt(**currDate**);
добавляет 5 часов вместо 4 часов. Угадайте, потому что значение currDate находится в EST, а не EDT. Спасибо.
Таким образом, он будет запускать запрос, как и ожидалось, правильно? И мне не нужно беспокоиться о том, что дата составляет 4 часа во время исполнения? – NewQueries
Да, он должен настроить их все, чтобы сравнить их с тем же часовым поясом, чтобы он был «правильным». Это действительно имеет значение? Я имею в виду, что определение «месяц назад» кажется каким-то субъективным в любом случае (некоторые месяцы имеют 31 день, у других - 28). Если вы получите документы, чтобы удалить час или четыре слишком рано/поздно, это может нанести ущерб вашему бизнес-процессу? –
Нет в этом случае, это нормально. Мне было просто любопытно узнать, в случае, если это критическое приложение времени. Но это очень помогло. Теперь я могу попробовать что-то критическое. Благодарю. – NewQueries