我有以下日期字符串“1月31日星期一”。
有没有办法将其转换为有效的Ruby格式化时间,以便将其转换为其他内容?
如果用不同的语言,我怎么能解析它,例如西班牙语“Lunes 31 Enero”?
答案 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对象返回。