beginning_of_day无法正确计算时间

时间:2016-03-03 14:56:10

标签: ruby-on-rails ruby-on-rails-4 activerecord

我有两个模型ShiftShiftDetail。我有一个自动添加ShiftDetails的Shift模型方法:

def add_shift_details
    (0..6).each do |i|
        shift_detail = ShiftDetail.new
        t1 = Time.now

        shift_detail.weekday = i
        shift_detail.start_time = t1.beginning_of_day
        shift_detail.end_time = t1.end_of_day
        self.shift_details << shift_detail
    end
end

但是当我保存实例时,数据库填充了

["start_time", "2016-03-02 23:00:00.000000"]
["end_time", "2016-03-03 22:59:59.999999"]

我正在使用Rails 4.2.5.1和ruby 2.3.0p0

我做错了什么?

更新:

当我在'rails c'中测试它时,它按预期工作:

2.3.0 :001 > Time.now.beginning_of_day
=> 2016-03-03 00:00:00 +0100 
2.3.0 :002 > Time.now.end_of_day
=> 2016-03-03 23:59:59 +0100

1 个答案:

答案 0 :(得分:2)

您的数据库在UTC时区存储DateTime,而Rails与柏林时区一起使用。柏林的午夜(格林尼治标准时间+1)与UTC的格林威治标准时间(格林尼治标准时间午夜)不相等:)

您有两种选择:

  1. 让您的算法使用UTC时区
    您可以使用Time.now.utcDateTime.now.new_offset(0)
  2. 让您的数据库存储日期在您的特定时区(在本例中为柏林)。我强烈建议不要这样做。
  3. 查看此帖子了解更多信息: https://stackoverflow.com/a/32229086/4304188