2015-06-30 101 views
2

值得注意的是我使用Ruby 2.1.2,所以Time類使用一個有符號的63位整數。從Epoch開始可以表示幾納秒時使用整數;根據文件,否則使用bignum或rational。時區與Ruby的時間類混淆

當我使用::new不帶參數,它使用我的本地時區(不UTC)給了我當前時間:

> Time.new 
=> 2015-06-30 18:29:08 -0400 

這是正確的。現在是美國東海岸的下午6:29。現在,我要檢查兩個時區的本地時間EDT以東:

> t = Time.new(2015,6,30,18,29,8,"+02:00") 
=> 2015-06-30 18:29:08 +0200 

這是我的困惑來自於當我指定兩個時區,以我的東,我認爲會有兩個附加小時,因爲每個時區的經度爲15度,每個時區爲1小時。

爲什麼它給我與當地時間相同的時間,而不是兩個小時後?

+1

「+02:00」是您設置時間的時區,而不是您所在時區的偏移量。 – texasbruce

回答

1

您認爲正在發生的事情並非發生了什麼。你所做的是給那個時間格林尼治標準時間+2的偏移量,而不是你目前的時區兩小時。

如果您希望看到提前兩小時偏移的時間,那麼您需要創建Time的實例,獲取當地時間,然後按GMT偏移進行移位。

Time.now.getlocal("-02:00") 

如果你要計算這個,你要看看你的本地時間的utc_offset第一,那麼無論加或減要移動的3600的產品及然而,許多時區。請注意,這隻會以整數增量移動時區,並且會在需要不同精度的時區(即紐芬蘭)時中斷。

t = Time.now 
t.getlocal(t.utc_offset + (3600 * 2))