更改默认的Ruby时间格式

时间:2011-01-12 23:23:33

标签: ruby-on-rails

我不得不将“.strftime(”%H:%M“)”附加到我在Rails项目中显示时间的任何内容。我有每个Concert对象的开始时间和结束时间,因此每当我想显示那些时间时,我必须附加“.strftime(”%H:%M“)。

请注意,我不是要求更改日期格式。日期看起来很好(如MM / DD / YYYY)。

解决这个问题的最佳方法是什么?有没有办法设置默认时间格式?

(我很确定这只是Ruby的东西,但我是新手,所以我不确定。)

4 个答案:

答案 0 :(得分:16)

由于您正在使用Rails,请利用I18n支持:http://guides.rubyonrails.org/i18n.html#adding-date-time-formats

# config/locales/en.yml
en:
  time:
    formats:
      default: "%H:%M"

然后当您致电I18n.l Time.now<%= l Time.now %>时,它会自动使用该格式。

答案 1 :(得分:2)

Ruby on Rails具有用于格式化DateTime实例的内置预设。以下是我的机器Time的用途:

>> Time::DATE_FORMATS
=> {:short=>"%d %b %H:%M", :db=>"%Y-%m-%d %H:%M:%S", :rfc822=>#<Proc:0x0000000103700b08@/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:13>, :time=>"%H:%M", :number=>"%Y%m%d%H%M%S", :long_ordinal=>#<Proc:0x0000000103700e50@/Users/donovan/.gem/gems/activesupport-3.0.1/lib/active_support/core_ext/time/conversions.rb:12>, :long=>"%B %d, %Y %H:%M"}

您可以像这样轻松使用它们:

>> Time.now.to_s(:db)
=> "2011-01-12 15:26:11"

您也可以自己定义并使用它:

>> Time::DATE_FORMATS[:mine] = "%H:%M"
=> "%H:%M"
>> Time.now.to_s(:mine)
=> "15:28"

答案 2 :(得分:1)

您可以在application_helper.rb文件中创建自定义函数。也许是这样的:

def custom_time(date)
  date.strftime("%H:%M")
end

不确定这是否是最佳做法,但它应该运作良好。

答案 3 :(得分:0)

我使用初始化程序:config / initializers / time_formats.rb,其中包含:

[Time, Date].map do |klass|
  klass::DATE_FORMATS[:app_date] = "%m/%d/%Y"
  klass::DATE_FORMATS[:app_month_and_year] = "%B %Y"
  klass::DATE_FORMATS[:app_abbrev_month_and_year] = "%b %Y"
  ...
end

然后我根据我想要显示的方式使用Time.now.to_s(:app_date)等。 您可以添加Time::DATE_FORMATS[:default] = "%H:%M"来完成您要执行的操作。这不是国际化的 - 为此,coreyward的答案可能更好。