我的服務器默認時區是+0400(莫斯科)。所有實例以UTC格式記錄到數據庫。 IE:用戶在04-00創建項目,記錄爲00-00。當我試圖獲得導軌中的時間偏移
Item.last
我看到UTC原始時間。當我問:
Item.last.created_at
我已經得到了+0400次。但!當我使用像
Item.where('created_at > ?', Time.now.beginning_of_day)
STD時間的函數,它正在SQL查詢的
SELECT `items`.* FROM `items` WHERE (items.created_at > '2012-11-30 00:00:00')
代替
SELECT `items`.* FROM `items` WHERE (items.created_at > '2012-11-29 20:00:00')
所以我失去了4小時。小緊縮使用in_time_zone:
Time.now.beginning_of_day.in_time_zone(-4)
但我不是絕地的方式:D任何想法?
出於興趣開始一天,你怎麼樣「記錄到UTC格式的數據庫「?這是自動處理的,還是你必須明確這麼做? –
@JonSkeet Rails(實際上是它的組件ActiveRecord)自動處理它。 – jdoe
好的。如果你在'Time.now'後面搜索值,會發生什麼?這個*還*會在4小時內(與插入一致)或不符合(與上述查詢一致)?我想知道它是否「聰明」,並決定如果你從午夜開始尋找東西,那你的意思是午夜UTC而不是本地時間...... –