2009-07-30 13 views
3

Date.parseを使いたいですが、イタリアの月の名前では機能しません!Parse Italian Date with Ruby

Date.parse "26アゴスト1991" =>日、2009年7月26日

任意の代替はありますか?

+0

できませんか?これは非常に欺かれています。 – OscarRyz

答えて

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.italyDate::ITALYと同じで、私は思う)メソッドは、私は認識していないよカレンダーの違いがあるだけの場合には、指摘する価値があります。

本当に、私はこれに対して一般的な解決策を見つけることができませんでした。多分、Rails用にi18nモジュールがありますか?

UPDATE:これは近いあなたを得るかもしれないが、それは全力を尽くすだろうように、それは見ていません:​​

+0

ありがとう!最後に、単純なgsubを使用します!これは唯一の軽量ソリューションだと思われます。 – collimarco

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) 
0

他の試みは、目標は、あなたが国際化で作業しているすべての言語をサポートすることですhttps://github.com/ZenCocoon/I18n-date-parser で建設されています。

まだ奇妙な問題に直面していますが、そこには入ります;