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

Pai*_*ick 47 datetime ruby-on-rails ruby-on-rails-3

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

2010-10-10 16:19:00 UTC
Run Code Online (Sandbox Code Playgroud)

如何摆脱UTC部分?

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

<%= trip.truckleft.strftime("%Y-%m-%d %H:%M") %>
Run Code Online (Sandbox Code Playgroud)

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

我查看了其他一些帖子,建议创建一个time_formats.rb初始化器,但是我没有做任何成功.

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

che*_*hes 65

另一种 - 也许是现在首选 - 的方式是使用Rails的国际化和本地化支持.在该指南中有很多东西需要学习,所以tl; dr版本是这样的:

<%= l trip.truckleft, :format => :long %>
Run Code Online (Sandbox Code Playgroud)

几个预定义的日期和时间格式一样:long提供给您已经为英语,你可以添加自己在config/locales/en.yml按照这些例子YAML结构.如果你还没有深入研究整个i18n/l10n的东西并且一直看着这个l方法令人困惑,你也可以使用:

<%= trip.truckleft.to_formatted_s(:long) %>
Run Code Online (Sandbox Code Playgroud)

  • 唉,这是[我试图链接的指南](http://guides.rubyonrails.org/i18n.html#adding-date-time-formats).Stack Overflow不允许我发布多个链接,因为我的帐户是新的.啧. (5认同)

Pai*_*ick 42

这是最终为我工作的:

我创建了一个新文件:

config/initializers/

named:time_formats.rb

并将其添加到该文件:

Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M"
Run Code Online (Sandbox Code Playgroud)

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


小智 26

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

date:
  formats:
    default: "%m/%d/%Y"
Run Code Online (Sandbox Code Playgroud)

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

Date::DATE_FORMATS[:default] = lambda { |date| I18n.l(date) }
Run Code Online (Sandbox Code Playgroud)


小智 14

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

Date::DATE_FORMATS[:default] = "%m-%d-%Y"
Time::DATE_FORMATS[:default] = "%m-%d-%Y %H:%M"
Run Code Online (Sandbox Code Playgroud)

当具有日期时间时,第二个将起作用(例如:在模型中为created_at).