[英]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.