0

seed.rb ファイルに次のコードがあります。

# create a 7 day wall
for day in 1..7
    # create the days
    d = Day.create(day: day)
    # for each day create the time slots. Use 15 minute timeslots for now
    start_time = Time.new.beginning_of_day
    puts start_time
    end_time = start_time.end_of_day
    puts end_time
    begin
            d.time_slots << TimeSlot.create(time: start_time)
            start_time += 15.minutes
            puts start_time
    end while start_time <= end_time
            puts "Start time after exit: #{start_time}"

    campaign.days << d
end

期待どおりの正しい出力を作成します

2013-04-19 00:00:00 -0700
2013-04-19 23:59:59 -0700
2013-04-19 00:15:00 -0700
2013-04-19 00:30:00 -0700
2013-04-19 00:45:00 -0700
2013-04-19 01:00:00 -0700
2013-04-19 01:15:00 -0700
2013-04-19 01:30:00 -0700
2013-04-19 01:45:00 -0700
2013-04-19 02:00:00 -0700
2013-04-19 02:15:00 -0700
2013-04-19 02:30:00 -0700
2013-04-19 02:45:00 -0700
2013-04-19 03:00:00 -0700
2013-04-19 03:15:00 -0700
2013-04-19 03:30:00 -0700
....

sqlite ブラウザーを使用して my db を見ると、これも表示されます。Rails コンソールを使用してデータベースを調べると、次のように表示されます。

1.9.3p194 :001 > TimeSlot.find(1)
  TimeSlot Load (17.3ms)  SELECT "time_slots".* FROM "time_slots" WHERE "time_slots"."id" = ? LIMIT 1  [["id", 1]]
 => #<TimeSlot id: 1, time: "2000-01-01 07:00:00", created_at: "2013-04-19 21:56:58", updated_at: "2013-04-19 21:56:58", campaign_id: nil, day_id: 1>

データベースのレコードが間違った日付を示しているのはなぜですか? タイムスタンプは正しいですが、時間フィールドが間違っています。理解できません。

4

1 に答える 1

0

この問題では、次の 2 つのことが起こっています。

  1. レールでtimeand型を使用することには、いくつかのニュアンスがあります。Railsの時間フィールドが空白に戻るdatetimeを参照してください
  2. タイムゾーンが問題です。データベースは時刻を UTC/GMT で保存します。がTime.new呼び出されると、システムの現在のタイムゾーンが使用されます。

時間オブジェクトをインクリメントするコードは正しいです。時間を表示するときにタイムゾーンを考慮する必要があります。

于 2013-04-19T23:18:07.227 に答える