2012-08-14 58 views
1

一些區我有3個對象 - @date,@time和@datetime。如何對象@date轉換爲使用區域從對象@time和@datetime時間(和日期時間)?轉換日期時間在軌3.2

例子:

@date = '2012-1-1' 
@time = '2012-08-14 14:48:47 +1000' 
@datetime = '2012-08-14 14:48:47 +0500' 
@converted_date_to_time = ...  # should give '2012-1-1 00:00:00 +1000' 
@converted_date_to_datetime = ... # should give '2012-1-1 00:00:00 +0500' 

回答

2

您可以分析這樣

1.9.3p194> date = '2012-1-1' 
=> "2012-1-1" 
1.9.3p194> Time.parse(date) 
=> 2012-01-01 00:00:00 +1300 

即使用我的本地時區(惠靈頓,+13)的日期。您也可以分析你的時間字符串以同樣的方式

1.9.3p194> time = '2012-08-14 14:48:47 +1000' 
=> "2012-08-14 14:48:47 +1000" 
1.9.3p194> Time.parse(time) 
=> 2012-08-14 16:48:47 +1200 

你會發現它看起來有點不對勁但這是因爲它再次使用我的本地時區,所以它是正確的,但目前在我的時區。然後,您可以將其轉換爲您想要的任何時區。

1.9.3p194> Time.parse(time).in_time_zone('Moscow') 
=> Tue, 14 Aug 2012 08:48:47 MSK +04:00 

1.9.3p194> Time.parse(time).in_time_zone('Brisbane') 
=> Tue, 14 Aug 2012 14:48:47 EST +10:00 

這對你的datetime字符串也是一樣的。

如果要使用特定的時區,你可以做如下

1.9.3p194> Time.find_zone('Tokyo').parse('2012-08-14 14:48:47 +0500') 
=> Tue, 14 Aug 2012 18:48:47 JST +09:00 
+0

這是正確的,不使用 '2012-1-1'.to_time.in_time_zone(' 莫斯科 '),但Time.parse(' 2012-1-1 ')。in_time_zone(' 莫斯科') – jtomasrl 2013-03-31 01:41:00

2

如果你想在config.time_zone指定的地域分析的時候,你可以使用:

Time.zone.parse('2012-08-14 14:48:47 +1000') 

我不會用日期時間,不過,除非你有一些特殊的要求,時間類現在支持一個巨大的日期範圍和Rails通過Time.zone處理時區真的很好。