2011-05-07 42 views
5

我有一個日期字符串20101129220021,所以我會用紅寶石DateTime.Parse本地時間

require 'date' 
d = DateTime.parse('20101129220021') 

這部分工作得很好,我得到一個日期,它是UTC。

我的問題是,我該如何將它轉換成我的當地時間?我嘗試了很多方法,例如使用d.to_time提取時間部分並操作結果,但它不起作用。據我所知,DateTime對象是不可變的。我能得到一些幫助嗎?

+0

你期望什麼?同一時間,但時區與當地時間相同,或上述UTC時間已轉換爲您的本地區域? – 2011-05-07 13:14:46

+0

說你在UTC +0300,你想要2010-11-29 22:00:21 +0300或2010-11-30 01:00:21 +0300。 – 2011-05-07 13:22:52

+0

我希望以後能夠直接存儲在數據庫中而不需要再次轉換。 – cherhan 2011-05-07 13:24:32

回答

3

您可以添加一個基於時區有理分數來獲得本地時間。

require 'date' 

# Make this whatever your zone is. Using UTC +0300 here. 
ZONE = 3 

d = DateTime.parse('20101129220021') + Rational(ZONE,24) 

d.to_s # => "2010-11-30T01:00:21+00:00" 
+0

這是爲1.8.X,如果使用1.9+,那麼納什的答案是要走的路。 – 2011-05-07 13:36:50

+0

我在我的OSX上安裝1.9.2時出現嚴重問題...我使用rvm,但仍然無法正常切換版本。 – cherhan 2011-05-07 14:05:39

4
irb(main):001:0> require "date" 
=> true 
irb(main):002:0> d = DateTime.parse('20101129220021') 
=> #<DateTime: 2010-11-29T22:00:21+00:00 (70719276007/28800,0/1,2299161)> 
irb(main):003:0> d.to_time 
=> 2010-11-30 00:00:21 +0200 

紅寶石1.9.2p180(2011-02-18)

+0

我在OSX上,由於很多原因,我沒有真正升級到1.9.2,因此上述命令對我來說並不適用,對不起。我的版本是紅寶石1.8.7(2010-12-23 patchlevel 330)[i686-darwin10] – cherhan 2011-05-07 13:34:04