2011-01-31 29 views
1

我有以下日期字符串“1月31日星期一”。将文本字符串转换为任何有效的Ruby格式化时间

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


我怎么能分析它的情况下,这是在不同的语言,比如西班牙语“Lunes 31 Enero”?

回答

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已经是西班牙语。

如果不是,就有可能重写日期的月和日常数,给它一个伸出援助之手:

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

看起来好像Date.parse(string)会为你工作。当给出您的示例字符串时,它会返回Mon, 31 Jan 2011作为Date对象。

+0

在irb中工作正常,未加载导轨。 – 2011-01-31 00:36:01

+0

在ruby 1.9.2p136上,'Date#parse`不存在,并且引发了一个错误。 – 2011-01-31 00:53:39

+1

“关于ruby 1.9.2p136,日期#解析不存在”。它的确如此,你只需要'需要'日期'。 “这只是Rails”。不,你必须要求图书馆。 – 2011-01-31 01:09:35

0

Date.parse作品就好了:

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