【问题标题】:rails i18n date problemrails i18n日期问题
【发布时间】:2009-07-31 10:56:34
【问题描述】:

我们目前正在开发一个使用 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。这可能是这种行为的原因吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby internationalization


    【解决方案1】:

    是的,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

    【讨论】:

    • 很透彻,既有清晰的解释,也有明确的建议。干得好,摩夫。 +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    相关资源
    最近更新 更多