2017-09-07 20 views
0

내가 지역화 된 문자열 날짜를 Ruby Date 객체로 변환하는 방법은 무엇입니까?

> Date.strptime("Aug 02, 2015", "%b %d, %Y") 
Sun, 02 Aug 2015 

영어

로 사용하는 경우 잘 작동 날짜가 그러나 나는 그것을 다른 언어 es, 그 나던 작업을 사용하는 경우. 예 :
> 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" 

로 표준화 할 필요가

, 그

때문에
> 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,하지만 루비'Time' 클래스를 사용하기 때문에 i18n을 지원하지 않습니다. – absessive

+0

내가 제안한 다른 옵션 중 하나를 시도해 보셨습니까? –

+0

'Date.parse'는 영어 이외의 달 이름을 사용하지 않습니다. 다른 하나는 (atleast on Rails 콘솔에서) 작동하지 않았으며, 무시 무시한 상수 - 잘못된 실행 – absessive