2014-08-27 28 views
0

我有一個日期時間字段和值存儲在MySQL這樣的:軌時間字段表示UTC

2014-08-26 16:00:00 

當用戶選擇日期時間,他們從一個jQuery日期時間彈出選擇它。並將其插入到文本字段中併發送到服務器,在此處解析如下:

def date_start=(s) 
    datetime = parse_datetime s 
    write_attribute :date_start, datetime 
end 

def parse_datetime(s) 
    DateTime.strptime(s,'%m/%d/%Y %I:%M %p') 
end 

然後插入到數據庫中。現在,當用戶編輯表格,日期時間顯示在文本字段,但它顯示是這樣的:

2014-08-26 16:00:00 UTC 

爲什麼它說UTC那裏(記錄被檢索並存儲在本地時間),以及如何能我擺脫了那個?

回答

0

你不應該重寫作家。 Rails shoudl正確處理它。 在形式顯示日期時間是這樣的:

f.text_field :date_start, (f.object.date_start.strftime('%m/%d/%Y %I:%M %p') if f.object.date_start) ... 

或撥打方法

def form_date_start 
    date_start.strftime('%m/%d/%Y %I:%M %p') if date_start 
end 

和形式

f.text_field :date_start, f.object.form_date_start 
1

它是好的做法,存儲時間戳在數據庫中的UTC時間,不管他們最初是哪個時區(這樣他們就可以進行準確的比較,並防止通常在事物不一致時出現的混亂)。

Active Record通過自動執行轉換來處理此問題。這意味着當用戶選擇日期時間時,您必須確保在輸入時使用Rails/Ruby中的正確時區,使用Time.use_zone()或類似的東西。並且在從數據庫中檢索後顯示它。您需要一些方法來檢索用戶的本地時區(Javascript或手動選擇的配置文件選項)。另外,如果您想將應用程序的默認時區設置爲UTC以外的其他時間,那麼您可以更改中的config.time_zone選項。請注意,數據庫仍然以UTC格式存儲事件,它只是允許您爲日期時間輸入和輸出設置合理的默認時區(即Active Record轉換爲/從的默認時區)。但是,這對個人用戶日期時間無助,除非您的所有用戶都駐留在同一時區。