我们目前正在开发一个使用i18n的rails项目,我们的日期问题很小:
# on my mac
"10.06.2008".to_date
# produces => Tue, 10 Jun 2008
# on a friends mac and on the production server
"10.06.2008".to_date
# produces => ..., 06 Oct 2008
正如您所看到的,日期不对。我们检查了一切。 locale.yml(de.yml)在两个系统上都很好,并且也设置了default_locale。我们系统之间的唯一区别是ruby版本。我正在运行ruby 1.8.7并且他运行1.8.6。这可能是这种行为的原因吗?
任何帮助都将不胜感激。
答案 0 :(得分:11)
是的,Ruby版本是不同的。 String#to_date
在内部调用Date._parse
,并返回Ruby 1.8.6和1.8.7的不同结果。
1.8.7:
require "date"
Date._parse("10.06.2008")
#=> {:year=>2008, :mday=>10, :mon=>6}
1.8.6:
Date._parse("10.06.2008")
#=> {:mday=>6, :mon=>10, :year=>2008}
change log for 1.8.7提到了对日期解析方式的更改:
Date.parse:'##。##。##'(其中每个'#'是一个数字)现在被视为'YY.MM.DD' 而不是'MM.DD.YY'。虽然这种变化可能让您感到困惑,但您可以 当你知道你在做什么时,总是使用Date.strptime() 用。
尽管未明确提及您示例中的四位数版本,但相同的更改可能会导致差异。解决方法是使用Date.strptime
。