我有一個日期字符串20101129220021
,所以我會用紅寶石DateTime.Parse本地時間
require 'date'
d = DateTime.parse('20101129220021')
這部分工作得很好,我得到一個日期,它是UTC。
我的問題是,我該如何將它轉換成我的當地時間?我嘗試了很多方法,例如使用d.to_time
提取時間部分並操作結果,但它不起作用。據我所知,DateTime
對象是不可變的。我能得到一些幫助嗎?
我有一個日期字符串20101129220021
,所以我會用紅寶石DateTime.Parse本地時間
require 'date'
d = DateTime.parse('20101129220021')
這部分工作得很好,我得到一個日期,它是UTC。
我的問題是,我該如何將它轉換成我的當地時間?我嘗試了很多方法,例如使用d.to_time
提取時間部分並操作結果,但它不起作用。據我所知,DateTime
對象是不可變的。我能得到一些幫助嗎?
您可以添加一個基於時區有理分數來獲得本地時間。
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"
這是爲1.8.X,如果使用1.9+,那麼納什的答案是要走的路。 – 2011-05-07 13:36:50
我在我的OSX上安裝1.9.2時出現嚴重問題...我使用rvm,但仍然無法正常切換版本。 – cherhan 2011-05-07 14:05:39
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)
我在OSX上,由於很多原因,我沒有真正升級到1.9.2,因此上述命令對我來說並不適用,對不起。我的版本是紅寶石1.8.7(2010-12-23 patchlevel 330)[i686-darwin10] – cherhan 2011-05-07 13:34:04
你期望什麼?同一時間,但時區與當地時間相同,或上述UTC時間已轉換爲您的本地區域? – 2011-05-07 13:14:46
說你在UTC +0300,你想要2010-11-29 22:00:21 +0300或2010-11-30 01:00:21 +0300。 – 2011-05-07 13:22:52
我希望以後能夠直接存儲在數據庫中而不需要再次轉換。 – cherhan 2011-05-07 13:24:32