Rails 3默认日期时间格式没有UTC

时间:2010-09-12 09:37:00

标签: ruby-on-rails datetime ruby-on-rails-3

我正在创建一个新的Rails 3应用程序,其中我使用DateTime用于几个字段,但是每个日期时间字段标准都有UTC(在视图中),如:

2010-10-10 16:19:00 UTC

如何摆脱UTC部分?

更新:这是我到目前为止所拥有的:

<%= trip.truckleft.strftime("%Y-%m-%d %H:%M") %>

所以我现在要做的就是把它放在帮助器中,但是不是更好的通用方法吗?

我查看了其他一些帖子,建议在初始化程序中创建time_formats.rb,但是我没有成功。

感谢您的帮助,非常感谢!

6 个答案:

答案 0 :(得分:64)

另一种 - 也许是现在首选 - 的方式是使用Rails' internationalization and localization support。在该指南中有很多东西需要学习,所以tl; dr版本是这样的:

<%= l trip.truckleft, :format => :long %>

您可以使用:long config/locales/en.yml作为英语的l,您可以按照这些示例中的YAML结构在<%= trip.truckleft.to_formatted_s(:long) %> 中添加自己的{{1}}。如果你还没有深入研究整个i18n / l10n的事情并且一直看着{{1}}方法令人困惑,你也可以使用:

{{1}}

答案 1 :(得分:42)

以下是最终对我有用的内容:

我在:

创建了一个新文件

config/initializers/

命名: time_formats.rb

并将其添加到该文件中:

Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"

然后我保存,重新启动服务器,它开始工作。

答案 2 :(得分:26)

我正在使用i18n格式化我的日期,并在en.yml中使用:

date:
  formats:
    default: "%m/%d/%Y"

我想重复使用该格式来显示模型的日期,所以我的config / initializers / time_formats.rb包含:

Date::DATE_FORMATS[:default] = lambda { |date| I18n.l(date) }

答案 3 :(得分:14)

确切地说,您应该将它们放在初始化程序中:

Date::DATE_FORMATS[:default] = "%m-%d-%Y"
Time::DATE_FORMATS[:default] = "%m-%d-%Y %H:%M"

具有日期时间时,第二个将起作用(例如:模型中的created_at)。

答案 4 :(得分:1)

您可以将以下行放在config/environment.rb文件的末尾:

Date::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"

答案 5 :(得分:1)

for rails 3

添加到config/environment.rb

my_datetime_formats = { :default => '%F %T' } #or any other you like
my_date_formats = { :default => '%F' } #or any other you like

Time::DATE_FORMATS.merge!(my_datetime_formats)
Date::DATE_FORMATS.merge!(my_date_formats)

(与其他答案的区别 - 是merge!方法)