2011-01-12 14 views
4

".strftime("%H:%M ")"を私のRailsプロジェクトに時間を表示しているものに追加しなくてはなりません。コンサートオブジェクトの開始時間と終了時間があるので、それらの時刻を表示したいときはいつも ".strftime("%H:%M ")"を追加する必要があります。デフォルトのRubyの時刻形式を変更する

日付の書式を変更することはありません。日付はそのままです(MM/DD/YYYYなど)。

これを回避するにはどうすればよいですか?デフォルトの時刻形式を設定する方法はありますか?

(私はこれが唯一のRubyのことですが、私は初心者ですので、私はわからないかなり確信している。)

+0

あなたのサイトが米国内のユーザーにのみ使用されている場合を除き、MM/DD/YYYYを日付形式で使用しないことをお勧めします。それはしばしばあいまいです(例:01/02/2011)。その他の地域の多くは、DD MM YYYYを使用しています。その月の(おそらく短い)名前を使用する方がよいでしょう。 – noodl

+0

注目!アメリカにいるにもかかわらず私は個人的にDD/MM/YYYYを使用していますが、このプロジェクトは非常に小さなパーティーのためのもので、すべてが米国出身でMM/DDコンベンションを使用しています。 – user5243421

答えて

14

あなたがRailsのを使っているので、国際化のサポートを活用する:あなたはI18n.l Time.now<%= l Time.now %>を呼び出すときhttp://guides.rubyonrails.org/i18n.html#adding-date-time-formats

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

その後、それは自動的にその形式を使用します。設定/初期化子/ time_formats.rb含まれています:

+0

何か不足しているかもしれませんが、ymlファイルに追加しましたが、まだ変更が反映されていません。私はRails 2.3.8を実行しています。以前はAgileの本で国際化に問題があったことを覚えています。私はいくつかの翻訳を得ることができる唯一の方法は、tメソッドを使用しています。私が読んだことから、翻訳は自動的に行われるべきです。何が間違っているのでしょうか? – user5243421

+0

これはばかげているかもしれませんが、サーバーを再起動しましたか?私は、翻訳ファイルが自動的に再読み込みされるとは思わない。その場合は、構文を再確認してください。 YAMLはインデントについて非常に特有です。最後に、この動作でドキュメントが正しくないことを確認するために、 "default"を明示的に指定してみてください。 – coreyward

+0

ええと、私はサーバーを再起動しようとしましたが、それは問題ではないようです。私は、明示的にデフォルトを指定することによってあなたが意味することはわかりません... – user5243421

2

のRuby on Railsが内蔵されていDateTimeインスタンスをフォーマットするためのプリセット。ここでは、彼らは私のマシン上でTimeのためのものであるものです:

>> Time::DATE_FORMATS 
=> {:short=>"%d %b %H:%M", :db=>"%Y-%m-%d %H:%M:%S", :rfc822=>#<Proc:[email protected]/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:[email protected]/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" 
+0

"Time :: DATE_FORMATS [:mine] ="%H:%M ""はどこに置くべきですか?どのバージョンのRuby/Railsを使用していますか?私はそれを試みるときに "NameError:初期化されていない定数Time :: DATE_FORMATS"をirbで取得します。 – user5243421

+0

私はそれをテストしたアプリでRails 3.0.1を使用しています。@ coreywardの提案をロケール設定に追加する必要があります。 –

1

をapplication_helper.rbファイルにカスタム関数を作成することができます。

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

これがベストプラクティスかどうかはわかりませんが、うまくいくはずです。

+0

なぜこれを下降させたのですか... – JackCA

0

私は初期化子を使用

[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"を追加することができます。しかし、これは国際化されていません - そのために、コアワイドの答えはおそらくより良いでしょう。

関連する問題