我的日期在使用英语
时效果很好> Date.strptime("Aug 02, 2015", "%b %d, %Y")
Sun, 02 Aug 2015
然而,当我使用另一种语言es
时,这不起作用。 E.g。
> 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 :(得分:0)
您可以先用英语替换西班牙语单词。您可以使用#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"
答案 1 :(得分:0)
我假设您已经尝试过以下功能,该功能可以处理将某些内容转换为DateTime对象的大多数情况。
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 )
除此之外,您可以尝试附加日期常量,以便正确地选择它们。个人避风港试过这种方法,但可能对你有用吗?
NSNotificationCenter
最后,您是否考虑过使用Chronic Gem进行日期解析?我相信它应该处理跨语言案件。