Вставка даты в документ MongoDB из Java

Я вставляю дату в ключ MongoDB из Java следующим образом:

DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("1-Apr-1970");

BasicDBObject doc = new BasicDBObject("name", "john").append("birthdate", date);

При запросе документа выдается следующая дата:

{ "_id" : { "$oid" : "55263cd3d3d584440534f0a4"} , "name" : "john" , 
"birthdate" : { "$date" : "1970-03-31T23:00:00.000Z"}}

Как видите, месяц не такой, как я ожидал (04). Есть ли лучший способ вставить дату в MongoDB из Java? как бы то ни было, я нахожу это довольно бесполезным, когда пытаюсь прочитать его с Java (я бы предпочел использовать простую строку ключа).


person user2824073    schedule 09.04.2015    source источник
comment
вы можете добавить дату как строку в формате базы данных в mongo db.   -  person Vinay Prajapati    schedule 09.04.2015


Ответы (1)


Это происходит из-за реализации метода toString() в BasicDbObject. По умолчанию даты печатаются так:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
format.setCalendar(new GregorianCalendar(new SimpleTimeZone(0, "GMT")));

Таким образом, у вас есть время для часового пояса GMT. Если вы попытаетесь получить дату (например, dbObject.get("дата рождения")), вы сможете увидеть ожидаемое значение.

person Piotr Chowaniec    schedule 09.04.2015
comment
Спасибо, что поделились подсказкой - person user2824073; 09.04.2015
comment
Вы никогда не должны заключать Z в одинарные кавычки. Проверьте правильный путь на stackoverflow.com/a/65710515/10819573. - person Arvind Kumar Avinash; 14.01.2021