【Rails】created_atとupdated_atへデータを登録する方法
過去データの取り込みで直接DBにデータを入れる際にcreated_at
とupdated_at
にはどうやって値をセットすれば良いのか分からなかったから調べてみた。
結論としてはTimeWithZone
クラスが使われているからTime.zone.now
すれば良いっぽい。
> Shop.first.created_at.class Shop Load (0.9ms) SELECT "shops".* FROM "shops" WHERE "shops"."deleted_at" IS NULL ORDER BY "shops"."id" ASC LIMIT 1 => ActiveSupport::TimeWithZone
TimeWithZone?
使い方はこんな感じ。 http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html
> Time.zone = 'Eastern Time (US & Canada)' => "Eastern Time (US & Canada)" > Time.zone.now => Mon, 18 Dec 2017 01:17:43 EST -05:00 > Time.zone = "Asia/Tokyo" => "Asia/Tokyo" > Time.zone.now => Mon, 18 Dec 2017 15:17:52 JST +09:00 > Time.zone.now.to_s => "2017-12-18 15:18:31 +0900" > Time.zone.local(2012,12,31,15,30,00) => Mon, 31 Dec 2012 15:30:00 JST +09:00 > Time.zone.local(2012,12,31,15,30,00).to_s => "2012-12-31 15:30:00 +0900" > Time.zone.parse('2013-12-31 15:30:00') => Tue, 31 Dec 2013 15:30:00 JST +09:00 > Time.zone.parse('2013-12-31 15:30:00').to_s => "2013-12-31 15:30:00 +0900"
その他の使い方は
> t = Time.zone.now => Mon, 18 Dec 2017 17:53:08 JST +09:00 > t.year => 2017 > t.month => 12 > t.day => 18 > t.hour => 17 > t.min => 53 > t.sec => 8 > t.zone => "JST" > t.to_s => "2017-12-18 17:53:08 +0900" > t + 1.day => Tue, 19 Dec 2017 17:53:08 JST +09:00 > (t + 1.day).to_s => "2017-12-19 17:53:08 +0900" > t.beginning_of_year => Sun, 01 Jan 2017 00:00:00 JST +09:00 > t.ago(1.day) => Sun, 17 Dec 2017 17:53:08 JST +09:00 > t.ago(1.day).to_s => "2017-12-17 17:53:08 +0900" > t.inspect => "Mon, 18 Dec 2017 17:53:08 JST +09:00" > t.to_a => [8, 53, 17, 18, 12, 2017, 1, 352, false, "JST"]
で、UTC
ってなんだってなったのでメモ。
「UTC(協定世界時)」とは、世界各地の標準時を決めるときの基準となる「世界標準時」のことです。たとえば日本の標準時(JST)は「UTC」よりも 9時間進んでいるため「UTC+09:00」と表示されます。 http://www.724685.com/word/wd140611.html
UTC
は世界標準の時間で、日本の場合はJST
で9時間ずれてるから+9
するのですね。
納得。