2010-10-28 65 views
31

我有一個這樣的字符串:轉換日期時間字符串爲UTC在軌

"2010-01-01 12:30:00" 

我需要轉換爲UTC從當前的本地時區。

我試過這個,但它似乎認爲該字符串已經是UTC。

"2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)") 
=> Fri, 01 Jan 2010 06:30:00 CST -06:00 

我不知道該從哪裏出發。

加入這個從我的評論:

>> Time.zone = "Pacific Time (US & Canada)" 
=> "Pacific Time (US & Canada)" 
>> Time.parse("2010-10-27 00:00:00").getutc 
=> Wed Oct 27 06:00:00 UTC 2010 
>> Time.zone = "Mountain Time (US & Canada)" 
=> "Mountain Time (US & Canada)" 
>> Time.parse("2010-10-27 00:00:00").getutc 
=> Wed Oct 27 06:00:00 UTC 2010 

感謝您的幫助。

回答

50
Time.parse("2010-01-01 12:30:00").getutc 

編輯

(磨齒一邊想着這是的Ruby/Rails的日期/時間處理的噩夢)

OK,這個怎麼樣:

Time.zone.parse("2010-01-01 12:30:00").utc 

注那Time.zone.parse返回DateTime,而附加.utc給你一個Time。有差異,所以要小心。

此外,Time.zone是Rails(ActiveSupport)的一部分,不是Ruby。就這樣你知道。

+0

很好用!謝謝! – 2010-10-28 20:31:48

+0

也許我說得太快了。它不會根據config.time_zone更改時間。我將在上面添加一些代碼以供參考。 – 2010-10-28 21:02:00

+1

看我的編輯。 (額外人物添加爲SO以允許發佈此評論。Blah等等我是海象等等) – zetetic 2010-10-28 21:47:49

5

軌道4及以上可以直接使用in_time_zone

"2010-01-01 12:30:00".in_time_zone 
#=> Fri, 01 Jan 2010 12:30:00 EST -05:00 

"2010-01-01 12:30:00".in_time_zone.utc 
#=> 2010-01-01 17:30:00 UTC 
+0

對問題的上下文沒有多加添加,但這也是可能的,因爲'timestamp.in_time_zone('UTC')',然後''timestamp.in_time_zone('Europe/Athens')' – 2017-10-18 15:11:52

相關問題