2016-04-26 55 views
1

在我的應用我有錯誤autoparsed時間

config.time_zone = 'Europe/Prague' 

鑑於其中時間來歷我有

<%= f.input :end_at, as: :string %> <!-- shortened --> 

這會產生像琴絃12:31,05:59,等。當Time對象被創建爲Slot模型的屬性時,它會得到錯誤的時區。像

slot = Slot.new({end_at: params[:end_at]}) 

哪裏模型是這樣的

create_table :slots do |t| 
    t.time :end_at 
end 

後來,當我嘗試

slot.end_at.zone 

返回「UTC」所以要麼我不明白,在時間的概念產生或者有什麼問題。它不應該是「CEST」嗎?從我得到的信息來看,UTC只用於數據庫,當它從那裏被轉換爲本地時間時,時間對象也會在本地時間被創建。這會在這裏失敗並將CEST時間保存爲數據庫,因爲UTC會導致錯誤的時間。

我該怎麼做?

+0

嘗試將您的時區設置爲「布拉格」而不是「歐洲/布拉格」。 – Uzbekjon

+0

沒有幫助。仍然一樣 – user3187377

+0

使用['I18n.l'](http://guides.rubyonrails.org/i18n.html#adding-date-time-formats)助手時什麼時候顯示? – Uzbekjon

回答

0

這是Rails中的一個known issue。我自己實際上將此視爲預期行爲,因爲根據定義,time列中沒有日期信息。所以'10:00'可能是夏天在布拉格保存的10AM CEST,但是在另外一些時區節省了一些其他時間的完全不同的時間 - 但在數據庫中它總是早上10點。想象一下,用這樣的時間打開一個6個月的記錄並再次保存 - 這會改變db中的值,這對我來說似乎很奇怪。

無論如何,你可以簡單地強制Rails的識別時間爲「今天」的節省時間,當它:

slot = Slot.new({end_at: Time.parse(params[:end_at])}) 

這將正確解析時間,今天的時間在配置的時區,並保存其表示轉換爲UTC到數據庫。

+0

我希望我做錯了什麼。謝謝 – user3187377