2016-08-11 57 views
0

我得到了一個失敗的rpsec測試,它看起來像是系統時鐘和Rails如何評估時間的區別。Rails Timestamps UTC vs

```

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允許ActiveSupport::TimeWithZone

雖然的the implementation的細節可能會有所不同,你可以從這個文件的Time.parse設計目標感:

由於有本地定義的時間之間矛盾重重世界各地的區域縮寫,這種方法並不是要了解所有這些縮寫。

GMT被認爲是默認時間,並與您在上面報告的輸出相匹配。用ActiveSupport::TimeWithZone代替它可以使Rails配置修改默認期望值。