如何在Ruby中将ISO 8601日期转换为UNIX时间戳?

6
我一直在尝试使用Time.parse()和Date.parse(),但是无法弄清楚。

我需要将形式为“2007-12-31 23:59:59”的日期转换为UNIX时间戳。类似于PHP的strtotime()函数将是完美的选择。

5个回答

6
你所给出的示例使用的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应该可以胜任;但是,在生产代码中使用时要小心,因为它可能会针对格式错误或无效输入给出意外的值,而不是抛出异常。

5

在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时间戳。

1
你可以使用 'date.to_time.to_i' 将日期时间转换为 Unix 时间戳。
以下是在 Rails 控制台上的输出:

date = Date.today => Thu, 23 Sep 2010 date => Thu, 23 Sep 2010 date.to_time.to_i => 1285180200

谢谢,Anubhaw

这在Rails中可以运行。以下是在Rails控制台上的输出 >> date = Date.today => Thu, 23 Sep 2010
date => Thu, 23 Sep 2010 date.to_time.to_i => 1285180200
- Anubhaw

0

你可以使用strftime方法

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

参考此处以获得更好的理解 blog

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


0

结果发现我所需要的只是:

Time.parse(date_str).to_i


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接