Как конвертировать дату в UTC в MongoMapper & Ruby / Rails? - PullRequest
3 голосов
/ 27 января 2011

Я добавил эту строку кода

self.auth_history.push [start_date, self.coupon_code]

И получил это сообщение об ошибке

Date is not currently supported; use a UTC Time instance instead.

Я тоже пробовал start_date.utc, но это тоже не сработало.

Пожалуйста, помогите. Благодаря.

Ответы [ 4 ]

8 голосов
/ 28 января 2011

Я получил этот ответ от группы Сиэтлской бригады -

===

Я не видел start_date, определенную в вашем коде как ключ в MongoMapper, поэтому Я предполагаю, что вы создаете свой собственный объект даты, либо напрямую через Ruby, или завернутый Rails. Насколько я знаю, и кто-то, пожалуйста, поправьте меня, Монго сохраняет даты как время UTC в миллисекундах с начала эпохи. Поэтому, когда вы определяете ключ с: отображение даты в MongoMapper, вы оборачиваете объект Time в Рубин.

Поэтому, если вы хотите сохранить дату внутри Монго, а это не было созданный MongoMapper, убедитесь, что вы создали объект Time в UTC. MongoMapper поставляется с методом Mixin Date, называемым to_mongo, который вы можете использовать.

>> Time.now.utc
=> Fri Jan 28 03:47:50 UTC 2011
>> require 'date'
=> true
>> date = Date.today
=> #<Date: 4911179/2,0,2299161>
>> Time.utc(date.year, date.month, date.day)
=> Thu Jan 27 00:00:00 UTC 2011
>> require 'rubygems'
=> true
>> require 'mongo_mapper'
=> true
>> Date.to_mongo(date)
=> Thu Jan 27 00:00:00 UTC 2011

Но следите за изменением времени.

>> Date.to_mongo(Time.now)
=> Thu Jan 27 00:00:00 UTC 2011
>> Date.to_mongo(Time.now.utc)
=> Fri Jan 28 00:00:00 UTC 2011

Удачи.

===

А с помощью

Date.to_mongo(start_date) 

у меня это работает.

0 голосов
/ 06 октября 2015

Вот еще один вариант:

Time.at(Date.today.to_datetime.to_i).utc

Здесь я использую Date.today в качестве произвольной даты в качестве примера. Замените на любую дату, которую вы хотите конвертировать. После преобразования даты в экземпляр Time ее можно без проблем сериализовать в BSON, поскольку Time является поддерживаемым типом примитива, то есть его можно сохранить с помощью MongoMapper в базе данных.

0 голосов
/ 19 мая 2015

Во-первых, я думаю, что название вопроса плохое в описании. На самом деле, разница между разными часовыми поясами заключается во времени, а не в дате. Поэтому неправильно говорить, что я хочу преобразовать дату в формат UTC.

В Ruby есть еще один способ конвертировать DateTime в формат UTC:

DateTime.now.new_offset(0)
0 голосов
/ 21 мая 2013

Согласно комментарию EfratBlaier, я обновил ответ.

Date.today.to_time.utc

...