おぴよの気まぐれ日記

おぴよの気まぐれ日記

岡山やプログラミング、ファッションのこと、子育てや人生、生き方についての備忘録。

【Rails】created_atとupdated_atへデータを登録する方法

過去データの取り込みで直接DBにデータを入れる際にcreated_atupdated_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するのですね。 納得。