Jos*_*ser 3 ruby time datetime ruby-on-rails
我一直在尝试Time.parse()和Date.parse(),但看不清楚它.
我需要将"2007-12-31 23:59:59"形式的日期转换为UNIX时间戳.像PHP的strtotime()函数会很完美.
你有Time.strptimeRuby 1.9所以在你的情况下,
>> time = Time.strptime('2007-12-31 23:59:59', '%Y-%m-%d %H:%M:%S')
=> 2007-12-31 23:59:59 +0000
Run Code Online (Sandbox Code Playgroud)
一旦有了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:
>> require 'time'
=> true
>> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T'))
=> Mon Dec 31 23:59:59 -0500 2007
Run Code Online (Sandbox Code Playgroud)
要将此格式的时间转换为Unix时间戳,只需使用.to_i:
>> Time.iso8601("2007-12-31 23:59:59".sub(/ /,'T')).to_i
=> 1199163599
Run Code Online (Sandbox Code Playgroud)
如果你需要更灵活的格式,Time.parse应该做的伎俩; 但是,我会谨慎地在生产代码中使用它,因为它可能会为格式错误或无效的输入提供意外的值,而不是抛出异常.