2016-04-18 85 views
1

我有隻存儲時間的列。我想將其轉換爲日期時間,然後轉換爲特定的時區。當我在控制檯上僅使用屬性進行操作時,它會顯示正確的轉換值。但是當我在查詢中使用它時,查詢顯示UTC中的當前時間。假設我有中央時間存儲的時間「05:15」。現在,當我想爲30分鐘加和的這段時間減去間隔提取記錄,我下面,Ruby on Rails 3將時間轉換爲特定時區的DateTime

day = Time.now 
# departure_time_from _db below is the name of column in table which store time 
departure = departure_time_from _db.change(:day => date.day, :month => date.month, :year => date.year) 
departure = departure.in_time_zone("Central Time (US & Canada)") 

當我執行上面的代碼在控制檯上看到的價值,它顯示了正確的轉換值。但是當我在下面的查詢中使用這個變量時,使用當前時間而不是出發時間。

Model.where("column_name > ? and "column_name < ?, departure - 30.minutes, departure + 30.minutes) 

在上面查詢中使用的應該是我想即中央時區的時間的時間,但在查詢輸出,它顯示的是使用UTC。

請讓我知道我錯過了什麼。

回答

1

只要它是相同的時間表示形式,查詢在where子句中使用的時區應該無關緊要。從Rails查詢輸出中看到的時間很可能是正在傳遞給where語句的ruby DateTime對象的UTC等效值。因此,如果departure是您的Ruby代碼中午12點(UTC -6),則SQL查詢中顯示的時間將爲18:00,這對應於中午CST。

+0

你的意思是說,無論我提供什麼日期時間,查詢中的日期時間都是按照UTC,即如果我在CST中提供日期時間,執行時它將被轉換爲UTC。 –

+0

是的,這是正確的,它已轉換爲UTC。 –

相關問題