我怎么会得到一个UNIX timestamp(数秒内自1970年以来GMT)从一日的对象在一个轨程序?

我知道的 Time#to_i 返回的时间戳,但这样做 Date#to_time 然后得到的结果时间戳在的东西就是由大约一个月(不知道为什么...).

任何帮助是理解的,谢谢!

编辑:OK,我想我想通了-我处理的一个日期几次在一个循环中,并且每次日被转移一点点因为一个时区的不匹配,最终导致我的时间戳是一个月关闭。仍然,我会有兴趣知道,如果有任何方式做到这一点没有依靠 Date#to_time.

有帮助吗?

解决方案

代码 date.to_time.to_i 应该可以正常工作。下面的Rails控制台会话显示了一个示例:

>> Date.new(2009,11,26).to_time
=> Thu Nov 26 00:00:00 -0800 2009
>> Date.new(2009,11,26).to_time.to_i
=> 1259222400
>> Time.at(1259222400)
=> Thu Nov 26 00:00:00 -0800 2009

请注意,中间DateTime对象是本地时间,因此时间戳可能比您预期的几个小时。如果您想在UTC时间工作,可以使用DateTime的方法“to_utc”。

其他提示

我得到以下当我试试看:

>> Date.today.to_time.to_i
=> 1259244000
>> Time.now.to_i
=> 1259275709

这两个之间的差异的数字是由于这样的事实, Date 不存储小时,分钟或者几秒钟的当前时间。换一个 Date 来一个 Time 将导致在这一天,午夜。

当您拥有任意DateTime对象时,Ruby 1.8的解决方案:

1.8.7-p374 :001 > require 'date'
 => true 
1.8.7-p374 :002 > DateTime.new(2012, 1, 15).strftime('%s')
 => "1326585600"

使用 to_utc utc 来修复本地时间偏移的建议选项不起作用。对我来说,我发现使用 Time.utc()正常工作,代码涉及的步骤较少:

> Time.utc(2016, 12, 25).to_i
=> 1482624000 # correct

VS

> Date.new(2016, 12, 25).to_time.utc.to_i
=> 1482584400 # incorrect

使用 Date ....

后调用utc时会发生什么
> Date.new(2016, 12, 25).to_time
=> 2016-12-25 00:00:00 +1100 # This will use your system's time offset
> Date.new(2016, 12, 25).to_time.utc
=> 2016-12-24 13:00:00 UTC

...很明显,调用 to_i 会给出错误的时间戳。

DateTime.new(2012, 1, 15).to_time.to_i
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top