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

Cy.*_*Cy. 1 ruby ruby-on-rails

我有以下日期字符串"1月31日星期一".

有没有办法将其转换为有效的Ruby格式化时间,以便我可以将其转换为其他东西?


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

the*_*Man 5

如果它是用不同的语言,即西班牙语"Lunes 31 Enero",我怎么能解析它呢?

通常情况下,我会说慢性宝石是灵活的日期时间解析的最佳选择.折腾不同的语言使它成为一个不同的问题,因为图书馆面向英语.

这意味着要回归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
Run Code Online (Sandbox Code Playgroud)

所以,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 )
Run Code Online (Sandbox Code Playgroud)

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