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

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

问题描述:

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

How would I get a UNIX timestamp (number of seconds since 1970 GMT) from a Date object in a Rails app?

我知道时间#to_i 返回时间戳,但是执行 Date#to_time 然后获取时间戳会导致大约一个月的时间(不知道为什么...)

I know Time#to_i returns a timestamp, but doing Date#to_time and then getting the timestamp results in something that's off by about a month (not sure why...).

感谢任何帮助,谢谢!

编辑:好的,我想我想到了 - 我是在循环中处理日期多次,每次由于时区不匹配而移动一点日期,最终导致我的时间戳一个月。不过,我有兴趣知道是否有任何方法可以不依赖 Date#to_time

OK, I think I figured it out- I was processing a date several times in a loop, and each time the date was moved a little because of a time zone mismatch, ultimately leading to my timestamp being a month off. Still, I'd be interested in knowing if there's any way to do this without relying on Date#to_time.

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

The code date.to_time.to_i should work fine. The Rails console session below shows an example:

>> 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。

Note that the intermediate DateTime object is in local time, so the timestamp might be a several hours off from what you expect. If you want to work in UTC time, you can use the DateTime's method "to_utc".