2011-01-31 47 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)