【问题标题】:How do I get a Range of ActiveSupport::TimeWithZone from a tstzrange column?如何从 tstzrange 列中获取 ActiveSupport::TimeWithZone 范围?
【发布时间】:2020-03-03 01:05:02
【问题描述】:

我有一个tstzrange column。 Rails 正在将其转换为 RangeTime 对象,这会丢失时区信息。我想要一个 RangeActiveSupport::TimeWithZone 对象。我该怎么做?

另外,我如何检查tstzrange 是否正好跨越当前时区的一天,以及哪一天?

【问题讨论】:

    标签: ruby-on-rails postgresql ruby-on-rails-6


    【解决方案1】:

    来自ActiveRecord::Timestamp docs...

    您还可以添加特定于数据库的时区感知类型。例如,对于 PostgreSQL:

    ActiveRecord::Base.time_zone_aware_types += [:tsrange, :tstzrange]
    

    in_time_zone 将在应用程序的时区将Time 转换为ActiveSupport::TimeWithZone。时间范围可以变成 ActiveSupport::TimeWithZone 的范围,如下所示:

    range = Range.new(
      tstzrange.begin.in_time_zone,
      tstzrange.end.in_time_zone,
      # Taking care to preserve whether the range is inclusive or exclusive.
      tstzrange.exclude_end?
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      • 1970-01-01
      • 2022-07-22
      相关资源
      最近更新 更多