2011-01-27 20 views
2

私はコードMongoMapper&Ruby/Railsで日付をUTCに変換するには?

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

のこの行を追加し、私もstart_date.utcを試してみましたが、それはどちらか動作しませんでした。このエラーメッセージ

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

を得ました。

助けてください。ありがとう。私はあなたが作成していると仮定しますので、私はMongoMapperでキーとして、コード内で定義されたstart_dateのを見ていない

===、 -

+0

try Time.new(開始日)、start_dateはどこから来たのですか?それは方法ですか? – andrea

+0

私はDateからUTC Timeへのstart_dateの変換を断念しました。 start_date(a Date)をstart_date.to_sを使用して文字列として保存します。 – Mei

答えて

7

私はシアトル旅団グループからこの答えを得ましたあなた自身の日付オブジェクトは、Ruby経由で直接、 またはRailsでラップされます。私が知る限り、誰かが私を修正してください。 は、エポックからのミリ秒単位のUTC時間として日付を格納します。したがって、 キーをMongoMapperのa:dateマッピングで定義すると、Timeオブジェクトが Rubyにラップされます。

したがって、MongoMapperによって作成された ではない日付をMongo内に保存する場合は、UTCでTimeオブジェクトを作成してください。 MongoMapperにはto_mongoというDate mixinメソッドが付属しています。

>> 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) 

を使用することによって、それは私のために動作します。

-2

EfratBlaierのコメントによれば、私は答えを更新しました。

Date.today.to_time.utc

+0

そのメソッドはto_date_timeではなく、to_datetimeです。 –

+0

正しい答えは、Date.today.to_time.utc – EfratBlaier

+1

です。これは、通常、日付をUTCにしたいので間違っている可能性があります。これにより、まず現地時間の真夜中に変換され、その時刻がUTCで表示されます。 – Amala

0

まず、私は質問のタイトルは説明に悪いことだと思います。実際、異なるタイムゾーンの違いは、Time on Dateにあります。だから、日付をUTC形式に変換したいと言うのは本当に適切ではありません。ここで

は、UTC形式に日時を変換するRubyで別の方法である:

DateTime.now.new_offset(0) 
-1

ここでは別のオプションです:

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

私は、任意の例日としてDate.todayを使用しています。変換したい日付に置き換えてください。 Timeインスタンスに変換されると、はサポートされているプリミティブ型であるため、BSONにシリアル化できます。つまり、MongoMapperを使用してデータベースに保存できます。

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 – Nullify

+0

私はコードを完全に変更した編集を自分の答えにロールバックしました。つまり、TimeインスタンスではなくDateTimeを返すコードになりました。また、この純粋なRubyソリューションがMongoMapperにどのように関係しているかについての説明を追加しました。 –

関連する問題