2016-08-11 2 views
0

私は失敗したrpsecテストを受けています。それはシステムクロックとRailsが時間を評価する方法の違いのようです。RailsタイムスタンプUTC対

`` `

expected: 2015-01-01 15:00:00.000000000 -0800 
got: 2015-01-01 15:00:00.000000000 +0000 

(compared using ==) 

Diff: 
@@ -1,2 +1,2 @@ 
-2015-01-01 15:00:00 -0800 
+2015-01-01 15:00:00 UTC 

` ``

何らかの理由Time.parse('01/01/2015 3:00pm')については、システムクロックのタイムゾーンに文字列を強制します。しかし、テスト中のコードはUTCで出力しています。

誰が理由や理由を知っていますか?

+0

タイムゾーンが設定されている場合は、config.rbをチェックインしてください。なぜでしょうか?-0800 – agmcleod

+3

また、 'Time.zone.parse'が好きかもしれません。 –

+0

Config/application.rbはタイムゾーンを設定しますが、仕様の予定されているタイムゾーンか、コードが実際に生成するものとは異なります。 –

答えて

1

ここでの問題は、Time.parseの動作です。 Time.zone.parseでそのコールを交換するthe implementationの詳細は変更になる場合がありますが、ActiveSupport::TimeWithZone

を可能にしますが、この文書からTime.parseの設計目標の感覚を得ることができます:ローカルに定義された時間の中で、多くの競合があるので

世界各地のゾーン略語を使用していますが、この方法ではすべてを理解するつもりはありません。

GMTは既定の時間とみなされ、上記の出力結果と一致します。 ActiveSupport::TimeWithZoneに置き換えることで、Railsの設定でそのデフォルトの期待値を修正することができます。

関連する問題