如何在ISO中将ISO 8601日期转换为UNIX时间戳?
我一直在尝试Time.parse()和Date.parse(),但看不出来弄明白。如何在ISO中将ISO 8601日期转换为UNIX时间戳?
我需要将窗体“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时间戳。
您可以使用'date.to_time.to_i'将日期时间转换为unix时间戳。
以下是轨控制台上的输出: -
日期= Date.today =>周四,2010年9月23日 日期 =>周四,2010年9月23日 date.to_time.to_i => 1285180200个
谢谢,Anubhaw
可以使用strftime
方法
日期= Date.today#这将返回星期四,2010年9月23日 str_date = date.strftime( '%B%d%Y')#这将给2010年9月23日
指这对更好地理解 blog
这将帮助你转换一次的自定义格式。但它不适用于您的情况,即将其转换为UNIX时间戳。
您给出的示例的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
应该做的伎俩;但是,我会在生产代码中使用它,因为它可能会给出意外的错误或无效输入值,而不是抛出异常。
原来所有我需要的是:
Time.parse(DATE_STR)。to_i
我应该澄清说我需要这个在rails中工作。 – 2010-09-23 05:05:27
那么这在钢轨中有效。以下是出带上轨控制台>>日期= Date.today =>周四,2010年09月23 >>日期 =>周四,2010 月23日>> date.to_time.to_i => 1285180200 – Anubhaw 2010-09-23 05:07:35