2017-09-07 11 views
0

私は英語ローカライズされた文字列の日付をRuby Dateオブジェクトに変換するには?

としてそれを使用するときに正常に動作し、日付を持って
> Date.strptime("Aug 02, 2015", "%b %d, %Y") 
Sun, 02 Aug 2015 

しかし、私はそれ別の言語es、そのdoesntの仕事を使用する場合。例えば。

> Date.strptime("ago 02, 2015", "%b %d, %Y") 
ArgumentError: invalid date 

テキスト文字列はago 02, 2015

ように、それ自体が別のサービスから来ている、と私は、このような

> I18n.localize(Date.strptime("Aug 02, 2015", "%b %d, %Y"), format: "%m/%d/%Y") 
"08/02/2015" 

などの特定の形式に標準化する必要があるRubyでこれを実行する方法はあります

> I18n.localize(Date.strptime("ago 02, 2015", "%b %d, %Y"), format: "%m/%d/%Y") 
"08/02/2015" 
+0

あなたは完全に言語にとらわれないソリューションを探していますか?それはすべて英語のためだけに機能しますか? –

答えて

-1

スペイン語を最初に英語で置き換えることができます。 #gsub、I18n yaml検索、または辞書の方法で行うことができます。

dictionary = { "ago" => "Aug" } 
date = "ago 02, 2015" 
words = date.split 
words[0] = dictionary[words[0]] 
date = words.join(" ") # "Aug 02, 2015" 

OOPの力を活用するために、それをリファクタリング:

class DateDictionary 
    LOOKUP = { "ene" => "Jan", "ago" => "Aug" } 

    def translate(date) 
    words = date.split 
    words[0] = LOOKUP[words[0]] 
    date = words.join(" ") 
    end 
end 

date = DateDictionary.new.translate("ago 02, 2015") # "Aug 02, 2015" 
+0

これは理想的ではありませんが、これは辞書自体が必要ないことを除いて私が行ったこととほとんど同じです。これはレールで月名のロケールキーを使用しているので – absessive

0

私はあなたがすでにDateTimeオブジェクトに何かを回すためのほとんどのシナリオを扱い、以下の機能を試してみたと仮定しています。

@date = Date.parse("ago 02, 2015") 

それ以外の場合は、日付定数を追加して正しく選択できるようにすることができます。個人的にこのアプローチを試していませんが、あなたのために働く可能性がありますか?

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) 

最後に、Chronic Gemを日付解析に使用することを検討しましたか?私はそれがクロスランクの事例を扱うべきだと思う。

+0

Tired Chronicですが、Rubyの 'Time'クラスを使用しているのでi18nもサポートしていません。 – absessive

+0

私が提案した他のオプションのいずれかを試しましたか? –

+0

'Date.parse'は英語以外の月の名前をとっていません。 もう1つは(atleast on Railsコンソールで)うまく動作しませんでした。 – absessive

関連する問題