2

ばかげた質問かもしれません...私はRubyが初めてで、最近、複数のテーブルを一般的なテーブルにマージするrakeタスクを作成しています。私がしなければならないことの 1 つは、データベースから日付を取得し、その日付を年と月の 2 つの整数に変換してから、それらを 2 つの別々の列に保存することです。

先週、このタスク ファイルを完成させましたが、残念ながらそのファイルは誤って削除されたため、コードを再度作成する必要があります。元のファイルで日付をどのように操作したか覚えていませんが、元のファイルに取り込んだ方法は、現在のコードよりもはるかに簡単だと思います。現在のコードは次のとおりです。

fetched_time=DateTime.strptime(pr.fetched_time,"%Y-%m-%d")
dr.year =  fetched_time.strftime('%Y').to_i
dr.month = fetched_time.strftime('%m').to_i

検索するために多くのキーワードを試しましたが、どれも役に立ちません。次のコードは、日付文字列を整数に変換する最良の方法ですか?

どうもありがとうございました。

4

2 に答える 2

8

はい、次を使用して可能Date#yearです:

require 'date'

d = Date.parse("20-08-2013")
d.year # => 2013
于 2013-08-22T18:48:50.580 に答える
0
now = Time.now.to_s
# => "2013-09-10 11:09:14 -0500"
fetched_time=DateTime.strptime(now, "%Y-%m-%d").to_s
# => "2013-09-10T00:00:00+00:00"
year =  Date.parse(fetched_time).year
# => 2013
month = Date.parse(fetched_time).month
# => 9
year.class
# => Fixnum
month.class
# => Fixnum

または

fetched_date=Date.strptime(now, "%Y-%m-%d").to_s
# => "2013-09-10"
date = Date.parse(fetched_date)
# => #<Date: 2013-09-10 ((2456546j,0s,0n),+0s,2299161j)>

とにかく、文字列よりも日付オブジェクトを使用したくないですか? タイムスタンプは何で構成されていますか? Rails と ActiveRecord は初めてです。

ActiveRecord::Base.default_timezone = # を何に設定していますか?

これらの余分な数値が Date オブジェクトにあることを知りたい場合は、それらをプラグインしてみてください

Date.jd(2299161)
# => #<Date: 1582-10-15 ((2299161j,0s,0n),+0s,2299161j)>
Date.jd(2456546)
# => #<Date: 2013-09-10 ((2456546j,0s,0n),+0s,2299161j)>

それらはユリウス日番号です。最後の 1 つは、イタリアと一部のカトリック諸国の暦改革に関するものです。

Date::ITALY
# => 2299161
于 2013-09-10T16:11:11.730 に答える