在Rails 6应用中,我具有reserved_between
tsrange
属性。
在PostgreSQL中,这些值存储为UTC(在这里没有问题),现在我试图将它们本地化为其他时区,但是在我看来,这种转换无效。
这里有一个小脚本来演示它。
p "UTC: #{Reservation.first.reserved_time}"
Time.use_zone('Europe/Rome') do
p "ROME: #{Reservation.first.reserved_time}"
end
应该提取哪个值["2019-08-05 15:28:03.443474","2019-08-05 15:58:03.443487"]
"UTC: 2019-08-05 15:28:03 UTC..2019-08-05 15:58:03 UTC"
"ROME: 2019-08-05 17:28:03 CEST +02:00..2019-08-05 17:58:03 CEST +02:00"
但实际上会打印出
"UTC: 2019-08-05 15:28:03 UTC..2019-08-05 15:58:03 UTC"
"ROME: 2019-08-05 15:28:03 UTC..2019-08-05 15:58:03 UTC"
我在Rails Github存储库https://github.com/rails/rails/issues/21116上发现了一个老问题,但似乎已经在https://github.com/rails/rails/commit/302e92359cc88258ae15a82454c58408a4b8157e上修复了
但不幸的是
...这不会自动使时区识别范围,...
那么,如何获得Range
的{{1}}而不是ActiveSupport::TimeWithZone
的{{1}}?
答案 0 :(得分:0)
您可以尝试覆盖reserved_time
上的Reservation
阅读器,将Range
转换为TimeWithZone
:
def reserved_time
range = read_attribute(:reserved_time)
(range.begin.in_time_zone..range.end.in_time_zone)
end