【问题标题】:Rails model attribute (a DateTime) has different value depending on how its calledRails 模型属性(一个 DateTime)具有不同的值,具体取决于其调用方式
【发布时间】:2016-01-05 20:45:07
【问题描述】:

我正在使用 Rails 4.2 和 Ruby 2.2.0。我有一个名为 Ride 的模型,它有一个名为 start_time 的 DateTime 属性。当我打电话给Ride.find(1803) 时,start_time 显示为 1 月 9 日。但是当我打电话给Ride.find(1803).start_time 时,它会返回 1 月 9 日的 start_time。这怎么可能,我该如何解决?这是我在控制台中运行的完整代码:

irb(main):028:0> Ride.find(1803)
=> #<Ride id: 1803, start_time: "2016-01-09 00:00:00", end_time: nil, created_at: "2016-01-05 16:55:44", updated_at: "2016-01-05 20:35:38", user_id: 29, ride_type: nil, horse_id: nil, notes: "", available_to_ride_additional_horses: nil, admin_approved: false, weekday: nil, unavailable_to_ride: false, time_range_dropdown: "Morning", rider_name: "Matti Fisher", rider_last_name: "Fisher", rider_first_name: "Matti", edited_at: nil, requested_time: "2016-01-09 19:30:00">
irb(main):029:0> Ride.find(1803).start_time
=> Fri, 08 Jan 2016 19:00:00 EST -05:00

【问题讨论】:

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


    【解决方案1】:

    这是因为日期/时间值以 UTC 格式存储在数据库中,并且 ActiveRecord 模型的默认实现 inspect 不应用任何时区转换。

    但是,当您访问日期/时间值时,Rails 将应用当前时区设置。

    你可以算算。由于您的时区是 UTC-5,因此两个日期时间都代表同一个对象

    2016-01-09 00:00:00 UTC
    Fri, 08 Jan 2016 19:00:00 EST -05:00
    

    作为证明,你可以调用

    Ride.find(1803).start_time.utc
    

    您将获得 UTC 的日期/时间,这可能与您在打印出完整记录表示时看到的值相同。

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-11
      • 2017-07-08
      • 1970-01-01
      • 2014-05-31
      相关资源
      最近更新 更多