Преобразование меток времени, хранящихся в коллекции Mongo - PullRequest
1 голос
/ 13 июля 2011

У меня есть различные временные метки, хранящиеся в коллекциях Mongo, некоторые как числа с плавающей точкой, а некоторые как целые числа.

Все они хранятся в BST, и сервер будет вскоре переключен на UTC. Как мне преобразовать их в Mongo в метки времени UTC?

В MySQL я могу сделать это:

UPDATE `table` SET `field` = CONVERT_TZ(`field`, 'Europe/London', 'UTC');

Есть ли эквивалент Монго?

Ответы [ 3 ]

1 голос
/ 14 июля 2011

Вам придется использовать ваш язык по своему выбору и обновлять их по одному. Это должен быть простой цикл for, который загружает данные и перезаписывает их.

Просто дважды проверьте, как выбранный вами язык обрабатывает временные метки в разных часовых поясах. Внесение такого изменения данных может иметь неожиданные последствия для производственного кода.

0 голосов
/ 14 июля 2011

Временные метки обычно в UTC, а не в определенном часовом поясе.Все библиотеки даты / времени, с которыми я работал, возвращали метки времени, которые представляют собой количество секунд (или миллисекунд) с 1 января 1970 года по Гринвичу.Проверьте документацию для библиотеки, которую вы использовали для создания метки времени, чтобы быть уверенным.

Это означает, что вы должны быть в порядке, если вы не использовали библиотеку даты / времени, которая не следует этому соглашению, или каким-то образом вычислилиотметки времени самостоятельно и учитывают часовой пояс.

Например, в JavaScript, если вы сохраните значение, возвращенное из new Date().getTime(), а затем передадите это значение в new Date(...) в другой системе, вы получите ту же абсолютную дату/ время, независимо от часовых поясов двух систем.То же самое касается Ruby, выполните Time.new.to_i на одной машине и запустите Time.at(...) на другой, и вы получите ту же абсолютную дату / время.Когда я говорю «абсолютная дата / время», я имею в виду, что это время UTC будет таким же, скорее всего, система отобразит его в местном часовом поясе, но это то, что вы хотите.

0 голосов
/ 14 июля 2011

Некоторые моменты, которые следует учитывать относительно даты в Mongo:

  • Все даты хранятся в UTC в MongoDB
  • MongoDB хранит даты внутри как 64-битное целое число, представляющее миллисекунды с 1970-01-01T00: 00: 00Z
  • Если указанное вами значение даты еще не в UTC, оно будет конвертировано в UTC перед сохранением в MongoDB драйвером

Рекомендация неиспользовать DateTime.Parse.Вы столкнетесь со всевозможными проблемами с часовыми поясами, касающимися того, как форматируются даты и время.

Вместо этого просто используйте один из конструкторов DateTime со вкусом UTC.

Пример:

var dateTime = new DateTime(2011, 5, 5, 0, 0, 0, DateTimeKind.Utc);

Надеюсь, вы найдете его полезным.

...