繁体   English   中英

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

[英]How do you convert an ISO 8601 date to a UNIX timestamp in Ruby?

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

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

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

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

在Ruby中,如果需要time库,则可以解析格式正确的ISO 8601日期。 如果您的日期是使用空格而不是T来将日期与时间分开,只需在将其传递给Time.iso8601之前将其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应该可以做到; 但是,我会谨慎地在生产代码中使用它,因为它可能会为格式错误或无效的输入提供意外的值,而不是抛出异常。

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

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

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

谢谢,Anubhaw

您可以使用strftime方法

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

为了更好地理解博客,请参阅此

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

原来我需要的是:

Time.parse(DATE_STR).to_i

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM