2013-11-26 4 views
0

Привет, я получаю ниже проблемы при реализации логики для удаления 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. Спасибо.

ответ

2

Это добавляет 4 часа, потому что эта дата показывается в UTC, что на 4 часа больше, чем EDT (это был правильный часовой пояс месяц назад). Я не думаю, что здесь есть проблема.

+0

Таким образом, он будет запускать запрос, как и ожидалось, правильно? И мне не нужно беспокоиться о том, что дата составляет 4 часа во время исполнения? – NewQueries

+0

Да, он должен настроить их все, чтобы сравнить их с тем же часовым поясом, чтобы он был «правильным». Это действительно имеет значение? Я имею в виду, что определение «месяц назад» кажется каким-то субъективным в любом случае (некоторые месяцы имеют 31 день, у других - 28). Если вы получите документы, чтобы удалить час или четыре слишком рано/поздно, это может нанести ущерб вашему бизнес-процессу? –

+0

Нет в этом случае, это нормально. Мне было просто любопытно узнать, в случае, если это критическое приложение времени. Но это очень помогло. Теперь я могу попробовать что-то критическое. Благодарю. – NewQueries

Смежные вопросы