2009-07-31 61 views
2

我們目前正在使用國際化Rails項目,我們有小問題的日期:軌i18n的日期問題

# 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。這可以成爲這種行爲的原因嗎?

任何幫助,將不勝感激。

回答

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

+0

非常徹底,既有明確的解釋,也有明確的建議。幹得好,molf。 +1 – 2009-07-31 17:03:42