Ruby / Rails:将date转换为UNIX时间戳

我如何从Rails应用程序中的Date对象获得UNIX时间戳(自1970年GMT以来的秒数)?

我知道Time#to_i返回一个时间戳,但做Date#to_time ,然后得到时间戳结果的东西是closures了大约一个月(不知道为什么…)。

任何帮助表示赞赏,谢谢!

编辑:好吧,我想我已经知道了 – 我正在循环处理一个date几次,每次date因为时区不匹配而被移动一点,最终导致我的时间戳被closures一个月。 不过,我还是有兴趣知道是否有任何方法可以做到这一点,而不依赖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的解决scheme:

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

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

 > 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