使用Ruby解析意大利日期

时间:2009-07-30 19:20:08

标签: ruby date parsing

我想使用Date.parse,但它不适用于意大利月份名称!

  
    

Date.parse“26 agosto 1991”     =>太阳,2009年7月26日

  

还有其他选择吗?

4 个答案:

答案 0 :(得分:4)

所有我能想到的是关于同一个schnaader的想法:在MONTHNAMES等之间进行映射,然后循环遍历映射,执行gsub。那就是:

english_to_italian = {
  'english' => 'italian',
  ...
  'august' => 'agosto',
  ...
}

english_to_italian.each do |en, it|
  date_string.gsub!(/\b#{en}\b/i, it)
end

date = Date.parse(date_string)

Date.italy(我认为与Date::ITALY相同)方法值得指出,以防日历差异我不知道。

真的,我很惊讶我找不到一般的解决方案。也许Rails有一些i18n模块可能会这样做?

更新:这可能会让你更接近,但看起来不会做任何事情:http://github.com/rafaelrosafu/i18n_localize_core/tree/master

答案 1 :(得分:1)

好吧,您可以使用字符串替换例程或RegEx将月份转换为英语翻译,然后调用Date.parse。毕竟,你只需要替换12个可能的值,或者是否还有更复杂的字符串?

请注意,Date类中有不同的东西可以帮助您,例如包含英文月份名称及其缩写的常量MONTHNAMES和ABBR_MONTHNAMES。

简单的示例代码只是为了表明我的意思:

# Note that you perhaps might want to
# convert input strings to lowercase
myString = "26 agosto 1991" 

# replace italian month names
myString.gsub("...", "januar")
...
myString.gsub("agosto", "august")
...
myString.gsub("...", "december")

# now it should parse correctly
Date.parse(myString)

答案 2 :(得分:1)

我遇到了一个非常相似的问题,并制作了一个名为Quando的宝石,可以解析任何本国语言的日期(格里高利历)。简而言之,您可以通过告诉图书馆如何识别语言中的月份名称以及指定需要解析的日期格式来进行初始设置。

也请参阅我的answer,以解答有关解析西班牙语文本日期的问题。

答案 3 :(得分:0)

https://github.com/ZenCocoon/I18n-date-parser正在构建另一项尝试 目标是支持您使用I18n的任何语言。

仍面临一个奇怪的问题,但会到达那里; - )