将文本字符串转换为任何有效的Ruby格式时间

时间:2011-01-31 00:29:19

标签: ruby-on-rails ruby

我有以下日期字符串“1月31日星期一”。

有没有办法将其转换为有效的Ruby格式化时间,以便将其转换为其他内容?


如果用不同的语言,我怎么能解析它,例如西班牙语“Lunes 31 Enero”?

4 个答案:

答案 0 :(得分:5)

  

如果用不同的语言,即西班牙语“Lunes 31 Enero”,我怎么解析呢?

通常我会说Chronic gem是灵活日期时间解析的最佳选择。折腾不同的语言使它成为一个不同的问题,因为图书馆面向英语。

这意味着回到Date.parse。放入IRB我有一个惊喜:

ruby-1.9.2-p136 :001 > require 'date'
 => true 
ruby-1.9.2-p136 :002 > puts Date.parse('Lunes 31 Enero')
2011-01-31

所以,Date.parse已经是西班牙语版本。

如果不是,则可以覆盖Date的Month和Day常量来帮助它:

require 'date'

Date::MONTHNAMES      = [nil] + %w( Enero Febrero Marzo Abril Mayo Junio Julio Agosto Septiembre Octubre Noviembre Diciembre )
Date::DAYNAMES        = %w( Lunes Martes Miércoles Jueves Viernes Sábado Domingo )
Date::ABBR_MONTHNAMES = [nil] + %w( Ene Feb Mar Abr May Jun Jul Ago Sep Oct Nov Dic )
Date::ABBR_DAYNAMES   = %w( Lun Mar Mié Jue Vie Sáb Dom )

我没有对此进行测试,因为它已经可以在不搞乱的情况下工作,但对于其他不受支持的语言,更改值并看看会发生什么可能是值得的实验。

答案 1 :(得分:0)

Date.parse效果很好:

$ irb
>> d = Date.parse('Monday 31 January')
=> #<Date: 4911185/2,0,2299161>
>> d.year
=> 2011
>> d.month
=> 1
>> d.day
=> 31

答案 2 :(得分:0)

string = "Monday 31 January"
date = Date.parse(string)

答案 3 :(得分:-1)

似乎Date.parse(string)对您有用。给定示例字符串时,它将Mon, 31 Jan 2011作为Date对象返回。