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

时间:2010-09-23 04:54:58

标签: ruby-on-rails ruby datetime time

我一直在尝试使用Time.parse()和Date.parse(),但看不清楚。

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

5 个答案:

答案 0 :(得分: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 :(得分:5)

您提供的示例的ISO 8601时间格式为“2007-12-31T23:59:59”,而不是“2007-12-31 23:59:59”(请注意T之间的time数据和时间组件)。

在Ruby中,如果您需要T库,则可以解析格式正确的ISO 8601日期。如果您的日期是使用空格而不是Time.iso8601来将日期与时间分开,只需在将日期传递到>> require 'time' => true >> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T')) => Mon Dec 31 23:59:59 -0500 2007 之前将其替换为:

.to_i

要将此格式的时间转换为Unix时间戳,只需使用>> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T')).to_i => 1199163599

Time.parse

如果您需要更灵活的格式,{{1}}应该可以做到;但是,我会小心在生产代码中使用它,因为它可能会为格式错误或无效的输入提供意外的值,而不是抛出异常。

答案 2 :(得分:1)

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

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

  
    

date = Date.today     => 2010年9月23日星期四     日期     => 2010年9月23日星期四     date.to_time.to_i     => 1285180200

  

谢谢,Anubhaw

答案 3 :(得分:0)

您可以使用strftime方法

date = Date.today #this将于2010年9月23日星期四返回 str_date = date.strftime('%b%d%Y')#这将于2010年9月23日发布

请参阅此内容以便更好地理解 blog

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

答案 4 :(得分:0)

原来我需要的是:

Time.parse(DATE_STR).to_i