2011-06-07 3 views
1

は、私は時間のために私の脳をラッキングされています:私はレールの日付形式のバグを見つけましたか?日付を解析しようとして

Date.today.to_s 
=> "06/07/2011" 

Date.today 
=> Tue, 07 Jun 2011 

Date.parse Date.today.to_s 
=> Wed, 06 Jul 2011 

Date::DATE_FORMATS[:default] 
=> "%m/%d/%Y" 

to_sのデフォルトの形式は、構文解析のためのデフォルトのフォーマットよりも違うのですか?なぜ彼らは私にこれをするのだろうか? Rubyの1.9.2-P180とのRailsに3.0.5を使用して

UPDATE Date.formatが正しい(ルビーライブラリを使用している間にあなたの答えのおかげで、私はDATE_FORMATSがレールの事であることを認識ので?)。 strptimeを使わずに日付/時刻をデフォルトのDATE_FORMATで解析する方法はありますか?

+0

Rails 3.1rc1では私には起こりません。 – Veeti

+0

@Veeti - 'Date :: DATE_FORMATS [:default] ="%m /%d /%Y "'のようなことをして、コードを実行すると、それを見ることができます。彼はおそらく初期設定でこのデフォルトの日付形式を設定しています。 –

答えて

5

通常、Date.today.to_sは「2011-06-07」を返しますが、デフォルトの日付形式を設定しているため、代わりに「06/07/2011」を使用しています。

Date.parseはYYYY-MM-DD形式を簡単に認識しますが、06/07/2011には実際にDD/MM/YYYY(MM/DD/YYYYではないと思います。 Date.parseは、あなたが設定したRailsのデフォルトの日付フォーマットについては何も知らない。デフォルトの日付フォーマットは、Railsの出力の場合にのみDate.to_sである。

次のようなMM/DD/YYYYの日付を解析するためにそれを強制することができます

Date.strptime(Date.today.to_s, "%m/%d/%Y") 
# => Tue, 07 Jun 2011 
+0

しかし、Time.zone.parseは少なくともこの情報を使うべきではありませんか?デフォルトの日付書式は出力用であり、解析用ではありません。 – hb922

0

to_sメソッドでは、locale optionを使用して日付の書き方を判断すると思います。

しかし、これはどのように問題であるかわかりません。 Date.parseはヒューリスティックを使用して日付を解析するので、時には間違ってしまうことがあります。

0

慢性宝石(linkは)ほとんどすべての日付の解析の問題を(はい、彼らは非常にいらいらすることができます)解決します。

Chronic.parse("06/07/2011") 
#=> 2011-06-07 12:00:00 +0000 
関連する問題