9

Rails アプリにインポートしている 100k 程度のレコードのバッチがあります。

次のように書式設定された各行に日付があります。03/17/81

ただし、日付フィールドに割り当てようとすると、次のように変換されます。

ruby-1.8.7-p174 > "03/17/81".to_date
 => Sat, 17 Mar 0081 

最終的には、フォーマットが次のようになることを望みます1981-03-17

これはインポート時に行うのが最善でしょうか、それとも Rails 構成でオーバーライドして、必要な形式に日付標準を設定する必要がありますか?Rails 2.3.5 での正しいアプローチは何ですか?

4

4 に答える 4

19

使用する

d = Date.strptime("03/17/81", "%m/%d/%y")

1981-03-17 でそれを取得するには、次を使用します。

d.to_s

Date Rubydocを参照してください。

于 2010-02-25T21:38:47.580 に答える
3

複数の場所でフォーマットを再利用する場合、これを行う適切な方法は次のようにすることです: http://seanbehan.com/ruby-on-rails/custom-date-formats-for-your-rails -応用/

ファイルを作成するconfig/initializers/date_formats.rb

...これを含む:

ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(
  :short_date => "%Y/%m/%d"
)

次に、次のように表示されます。

ruby-1.8.7-p174 > date = "03/17/81".to_date
ruby-1.8.7-p174 > date.to_s(:short_date)
#=> "1981/03/17"
于 2010-02-25T22:28:30.943 に答える
1

Chronic を試してください (gem installchronic):

require 'rubygems'
require 'chronic'
puts Chronic.parse "03/17/81"
#=> Tue Mar 17 12:00:00 -0800 1981

Time オブジェクトを返します。

于 2010-02-25T21:36:44.090 に答える
0

Rails を変更するのではなく、コードを変更してください。文字列を適切な日付に変換するメソッドを作成することに問題はありません。

string = "03/17/81"
date   = if string =~ %r{(\d+)/(\d+)/(\d+)}
  Date.parse("19#{$3}-#{$1}-#{$2}")
else
  nil # failover
end
于 2010-02-25T21:38:37.503 に答える