我有以下日期字符串“1月31日星期一”。将文本字符串转换为任何有效的Ruby格式化时间
有什么办法将其转换为有效的Ruby格式化时间,以便我可以将其转换为其他内容?
我怎么能分析它的情况下,这是在不同的语言,比如西班牙语“Lunes 31 Enero”?
我有以下日期字符串“1月31日星期一”。将文本字符串转换为任何有效的Ruby格式化时间
有什么办法将其转换为有效的Ruby格式化时间,以便我可以将其转换为其他内容?
我怎么能分析它的情况下,这是在不同的语言,比如西班牙语“Lunes 31 Enero”?
我怎么能分析它的情况下,这是在不同的语言,即西班牙语 “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已经是西班牙语。
如果不是,就有可能重写日期的月和日常数,给它一个伸出援助之手:
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)
我没有测试过,因为它已经工作没有用的东西搞乱,但对于其他不受支持的语言,改变这些值并查看会发生什么可能是一个有价值的实验。
看起来好像Date.parse(string)
会为你工作。当给出您的示例字符串时,它会返回Mon, 31 Jan 2011
作为Date对象。
Date.parse
作品就好了:
$ irb
>> d = Date.parse('Monday 31 January')
=> #<Date: 4911185/2,0,2299161>
>> d.year
=> 2011
>> d.month
=> 1
>> d.day
=> 31
string = "Monday 31 January"
date = Date.parse(string)
在irb中工作正常,未加载导轨。 – 2011-01-31 00:36:01
在ruby 1.9.2p136上,'Date#parse`不存在,并且引发了一个错误。 – 2011-01-31 00:53:39
“关于ruby 1.9.2p136,日期#解析不存在”。它的确如此,你只需要'需要'日期'。 “这只是Rails”。不,你必须要求图书馆。 – 2011-01-31 01:09:35