【问题标题】:Ruby/Rails: converting a Date to a UNIX timestampRuby/Rails:将日期转换为 UNIX 时间戳
【发布时间】:2010-12-20 19:52:33
【问题描述】:

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

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

感谢任何帮助,谢谢!

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

【问题讨论】:

    标签: ruby-on-rails ruby date timestamp


    【解决方案1】:

    代码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”。

    【讨论】:

    • DateTime 没有to_utc
    • date.to_time.utc 大概就是他的意思。
    • 在 Rails 中,通过 ActiveSupport,DateTime 实例确实有一个 utc() 方法(也别名为 getutc)
    【解决方案2】:

    我在尝试时得到以下信息:

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

    这两个数字之间的差异是因为Date 不存储当前时间的小时、分钟或秒。将 Date 转换为 Time 将导致当天午夜。

    【讨论】:

      【解决方案3】:

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

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

      > 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 会给出错误的时间戳。

      【讨论】:

        【解决方案4】:

        当您有任意 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"
        

        【讨论】:

          【解决方案5】:
          DateTime.new(2012, 1, 15).to_time.to_i
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-05-07
            • 2020-10-19
            • 2020-12-23
            • 2016-04-24
            • 2012-07-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多