Как понять BSONDateTime в MongoDB? (Скала)

BSONDateTime в MongoDB — это просто длинное число, которое выглядит так:

BSONDateTime(1403950332121)

Как мне это использовать или перевести в удобочитаемую дату и время?


person zunior    schedule 23.12.2014    source источник


Ответы (2)


Я считаю, что это секунды эпохи как миллисекунды. Это количество секунд с первой секунды 1 января 1970 года. Итак, это количество миллисекунд с 1 января 1970 года. Оно основано на UTC, хранящемся как 64-битное целое число.

Вы можете использовать команду даты Linux — мой часовой пояс MST-7.

$ date --date '@1403950332'
Sat, Jun 28, 2014  4:12:12 AM

Я удалил последние три цифры (миллисекунды).

person jim mcnamara    schedule 23.12.2014
comment
Но как бы я сделал преобразование в scala - person zunior; 23.12.2014
comment
@user3369872: Во-первых: Джим прав. Во-вторых, существует множество документации по преобразованию миллисекунд эпохи в местное время. Просто погуглите. - person Markus W Mahlberg; 23.12.2014
comment
@MarkusWMahlberg В-третьих, документы mongoDB до боли расплывчаты, говоря, что BSONDateTime находится в миллисекундах с начала эпохи: getValue() Получает значение DateTime как длинное. Худший комментарий по javadoc. - person Kieveli; 20.07.2015
comment
@Kieveli Простое чтение JavaDocs не поможет вам с любой базой данных. В документах базы данных четко указывается BSON Date is a 64 -битное целое число, представляющее количество миллисекунд, прошедших с эпохи Unix (1 января 1970 г.). ;) - person Markus W Mahlberg; 21.07.2015
comment
@Kieveli Как и спецификация BSON: UTC datetime - int64 - это миллисекунды UTC с эпохи Unix. - person Markus W Mahlberg; 21.07.2015
comment
@Kieveli С вами, хотя и в комментарии JavaDoc, тот, кто несет за это ответственность, должен быть вытащен из рук. - person Chris Hatton; 16.07.2021

Вот список неявных преобразователей, которые мне показались полезными: https://gist.github.com/ctcarrier/9918087

Меня устраивает. Одно небольшое изменение, которое может вам понадобиться: вместо установки глобального DateTimeZone.default добавьте аргумент в конструктор DateTime:

implicit object BSONDateTimeHandler extends BSONHandler[BSONDateTime, DateTime] {
  def read(time: BSONDateTime) = new DateTime(time.value, DateTimeZone.UTC)
  def write(jdtime: DateTime) = BSONDateTime(jdtime.getMillis)
}
person Ed Staub    schedule 21.03.2015