时区与Ruby的Time类混淆

时间:2015-06-30 22:34:01

标签: ruby

值得注意的是我使用的是Ruby 2.1.2,因此Time类使用带符号的63位整数。当它可以代表自Epoch以来的数个纳秒时使用整数;否则,根据文件使用bignum或理性。

当我使用不带参数的::new时,它会使用我的本地时区(不是UTC)给出当前时间:

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

这是对的。现在是美国东海岸的下午6:29。现在我想查看东部时间两个时区的当地时间:

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

这就是我的困惑所在。当我在我的东边指定两个时区时,我希望还有两个小时,因为每个时区经度为15度,每个时区用1小时表示。

为什么它给我的时间与当地时间相同,而不是两小时后呢?

1 个答案:

答案 0 :(得分:1)

您认为发生的事情并非如此。你所做的就是给这个时间一个GMT +2的偏移,而不是你当前时区的两个小时。

如果您希望在距您所在位置两个小时的偏移处看到时间,那么您需要创建Time的实例,获取当地时间,然后按GMT偏移量移动。< / p>

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

如果你想计算这个,你必须首先查看当地时间的utc_offset,然后加上或减去3600的产品以及你要移动的多个时区。请注意,这只会以整数增量移动时区,并且在需要不同精度的时区(即纽芬兰)的情况下会中断。

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