繁体   English   中英

时区与 Ruby 的 Time 类混淆

[英]Timezone confusion with Ruby's Time class

值得注意的是,我使用的是 Ruby 2.1.2,因此 Time 类使用有符号的 63 位整数。 当整数可以表示自 Epoch 以来的纳秒数时使用; 否则,根据文档,使用 bignum 或rational。

当我使用不带参数的::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 小时表示。

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

你认为正在发生的事情并不是正在发生的事情。 你所做的是给那个时间一个 GMT +2 的偏移量,而不是你当前时区的两个小时。

如果您想查看比您所在位置早两个小时的偏移量处的时间,那么您需要创建Time实例,获取您的本地时间,并将其偏移 GMT 偏移量。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM