【问题标题】:How do you convert an ISO 8601 date to a UNIX timestamp in Ruby?如何在 Ruby 中将 ISO 8601 日期转换为 UNIX 时间戳?
【发布时间】:2011-04-16 02:08:02
【问题描述】:

我一直在尝试 Time.parse() 和 Date.parse(),但看不出来。

我需要将格式为“2007-12-31 23:59:59”的日期转换为 UNIX 时间戳。像 PHP 的 strtotime() 函数这样的东西会很完美。

【问题讨论】:

    标签: ruby-on-rails ruby datetime time


    【解决方案1】:

    您给出的示例的 ISO 8601 时间格式将是“2007-12-31T23:59:59”,而不是“2007-12-31 23:59:59”(注意数据和数据之间的 T时间分量)。

    在 Ruby 中,如果您需要 time 库,您可以解析格式正确的 ISO 8601 日期。如果您的日期带有空格而不是 T 以将日期与时间分开,只需在将其传递给 Time.iso8601 之前将其替换:

    >> require 'time'
    => true
    >> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T'))
    => Mon Dec 31 23:59:59 -0500 2007
    

    要将这种格式的时间转换为 Unix 时间戳,只需使用.to_i

    >> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T')).to_i
    => 1199163599
    

    如果您需要更多格式的灵活性,Time.parse 应该可以解决问题;但是,我会小心在生产代码中使用它,因为它可能会为格式错误或无效的输入提供意外值,而不是引发异常。

    【讨论】:

      【解决方案2】:

      你在 Ruby 1.9 中有 Time.strptime 所以在你的情况下,

      >> time = Time.strptime('2007-12-31 23:59:59', '%Y-%m-%d %H:%M:%S')     
      => 2007-12-31 23:59:59 +0000
      

      一旦有了Time 对象,您就可以将其转换为多种格式。一个简单的 time.to_i 会给你一个 Unix 时间戳。

      【讨论】:

        【解决方案3】:

        您可以使用 'date.to_time.to_i' 将日期时间转换为 unix 时间戳。

        以下是rails控制台上的输出:-

        日期 = 日期.今天 => 2010 年 9 月 23 日,星期四 日期 => 2010 年 9 月 23 日,星期四 date.to_time.to_i => 1285180200

        谢谢,阿努博

        【讨论】:

        • 这在 Rails 中有效。以下是 Rails 控制台上的输出 >> date = Date.today => Thu, 23 Sep 2010 >> date => Thu, 23 Sep 2010 >> date.to_time.to_i => 1285180200
        【解决方案4】:

        原来我只需要:

        Time.parse(date_str).to_i

        【讨论】:

          【解决方案5】:

          你可以使用strftime方法

          date = Date.today #这将返回 Thu, 23 Sep 2010 str_date = date.strftime('%b %d %Y') # 这将给出 Sep 23 2010

          参考这个以获得更好的理解 blog

          这将帮助您以自定义格式转换时间。但它不适用于您的情况,即将其转换为 UNIX 时间戳。

          【讨论】:

            猜你喜欢
            • 2012-02-13
            • 1970-01-01
            • 2011-05-02
            • 1970-01-01
            • 2019-09-15
            • 1970-01-01
            • 2020-11-23
            • 2022-10-15
            • 1970-01-01
            相关资源
            最近更新 更多