【问题标题】:Why is database time value different from the value created in the ruby time object?为什么数据库时间值与 ruby​​ 时间对象中创建的值不同?
【发布时间】:2013-04-19 22:06:29
【问题描述】:

我的seeds.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 浏览器查看我的数据库时,我也看到了这一点。当使用我的 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>

为什么数据库中的记录显示错误的日期?时间戳是正确的,但时间字段是错误的。没看懂。

【问题讨论】:

  • 您是在数据库中将其存储为time 列还是datetime 列?如果这是第一个案例,我相信这可以帮助您:stackoverflow.com/questions/2760963/…
  • 是的,我正在使用time

标签: sqlite activerecord ruby-on-rails-3.2


【解决方案1】:

这个问题有两件事:

  1. 在rails 中使用timedatetime 类型存在一些细微差别。见Time fields in Rails coming back blank
  2. 时区是个问题。数据库以 UTC/GMT 存储时间。当Time.new 被调用时,它使用系统的当前时区。

增加时间对象的代码是正确的。我只需要在显示时间时考虑时区。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2020-05-16
    相关资源
    最近更新 更多