首页 > 解决方案 > Rails 猴子修补不适用于 TimeWithZone 对象

问题描述

我里面有这个 Time 类扩展lib/core_extensions/time/formatter.rb

module CoreExtensions
  module Time
    module Formatter
      def to_formatted_utc
        puts({a: self.utc, b: utc})
        utc.strftime("%H:%M")
      end

      def to_formatted_tz
        in_time_zone.strftime("%H:%M")
      end
    end
  end
end

我不知道为什么,它没有达到我的预期,

# Expected results is return 15:51

Time.zone.now                        # => Sat, 13 Mar 2021 22:51:29.217722286 +07 +07:00
Time.zone.now.utc                    # => 2021-03-13 15:51:29.217722286 UTC
Time.zone.now.utc.strftime("%H:%M")  # => 15:51

# Actual results when using to_formatted_utc

Time.zone.now.to_formatted_utc  # => 22:51

所以我尝试使用它来调试它byebug,我发现它utc并没有将时区更改为 UTC 格式,所以它保持 +07:00格式不变,但是当我尝试使用它时,Time.zone.now.to_formatted_tz它又增加了 7 个小时。但它不应该那样做,好像我试过这样做

Time.zone.now.in_time_zone  # it stays to +07:00, and the hours didn't changed

为什么会这样?以及如何使它像我预期的那样工作?

谢谢

红宝石版本:3.0.0

RoR 版本:6.1.1

编辑:

刚刚发现当我尝试在方法内部通过调试并执行时self

它表明了这一点

Time.zone.now                   # => Sat, 13 Mar 2021 22:51:29.217722286 +07 +07:00
Time.zone.now.to_formatted_utc  # => 2021-03-13 22:51:29.217722286 UTC

所以+07:00格式更改为UTC但不减去 7 小时,如何解决这个问题?

标签: ruby-on-railsrubyruby-on-rails-6.1ruby-3

解决方案


推荐阅读