Ruby on rails 如果a在rails中设置了正确的时区,为什么我会得到错误的时间?
在ruby中,我试图将分支机构的开放和关闭时间保存为Ruby on rails 如果a在rails中设置了正确的时区,为什么我会得到错误的时间?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在ruby中,我试图将分支机构的开放和关闭时间保存为time在rails上,但当我需要它为-5时,它会节省-6小时的时间差,因为它是本地时间 在其他型号中,我将日期和时间保存为datetime,并保存正确的时间, 但在分行我只需要时间 在我的application.rb中 config.time_zone = 'Monterrey' // It has -5 difference 在我的模式中 create_table "branches", force: :cascade do |t
time
在rails上,但当我需要它为-5时,它会节省-6小时的时间差,因为它是本地时间在其他型号中,我将日期和时间保存为
datetime
,并保存正确的时间,
但在分行我只需要时间
在我的application.rb中
config.time_zone = 'Monterrey' // It has -5 difference
在我的模式中
create_table "branches", force: :cascade do |t|
t.string "name"
t.string "address"
t.time "open_time"
t.time "close_time"
end
// In bookings work correctly
create_table "bookings", force: :cascade do |t|
t.string "client_name"
t.datetime "date"
end
范例
如果我保存了预订,是否有正确的时区
> Booking.last.date
=> Sun, 12 Apr 2020 17:31:00 CDT -05:00
> Branch.last.open_time
=> Fri, 31 Dec 1999 22:50:00 CST -06:00
但是如果我保存一个分支,它的时区就错了
> Booking.last.date
=> Sun, 12 Apr 2020 17:31:00 CDT -05:00
> Branch.last.open_time
=> Fri, 31 Dec 1999 22:50:00 CST -06:00
当显示时间戳时,ruby将告诉您时区的名称(即CDT、CST)和UTC的偏移量(即:-05:00、-06:00)。您看到的两个时区是:
- 中央夏时制:
> Booking.last.date => Sun, 12 Apr 2020 17:31:00 CDT -05:00
- 中央标准时间:
> Branch.last.open_time => Fri, 31 Dec 1999 22:50:00 CST -06:00
从地理位置上看,两个时区代表同一地区,冬季使用CST,夏季使用CDT。欢迎!命名、缓存和时区总是很难处理。看看好的第一个问题!对问题的简明解释,包括所有相关信息。蒙特雷有两个当地时区。标准时区为CST(S=标准)。但在夏季,使用CDT(D=日光,通常为3月至11月)。因此,夏季日期(如4月12日)的正确时区为CDT,而冬季日期(如12月31日)的正确时区为CST。你的约会没有什么“问题”。尝试将冬季日期转换为夏季时区(反之亦然)没有多大意义。这就像试图将晚上8:00(20:00)设为“上午时间”。是的,但是当我运行
分支时,我如何获得CDT时间。最后。打开时间
您必须将配置时区
设置为不跟踪夏令时的时区(例如:GMT-5
),或者手动从一个时区转换到另一个时区。如果你问这个问题是因为你需要在应用程序中相互比较时间戳,那么我会在模型中添加local\u date
方法。该方法将在本地时区返回<代码>日期>代码,我将在整个代码中使用它而不是<代码>日期>代码。如果应用程序跨越一个时区,我会认真考虑在数据库中存储UTC时间。(至少,这将更容易手工比较不同时区中的时间戳。)@ UrSADK“我会认真考虑在数据库中存储UTC时间”——Rails已经以这种方式工作。数据库不包含任何时区数据。@Stefan,是的,该位的措辞可以更好。。。原则上我同意你的看法,rails应该是这样工作的,ActiveRecord应该在数据库中存储UTC时区。然而,rails非常灵活,我们不知道OP的config.active\u record.default\u timezone的值。因此,在这种情况下,我认为最好是谨慎行事,并向OP提供常见最佳实践的指示。:)