ruby 配置Rails控制台的默认日期时间格式

cl25kdpy  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(99)

默认情况下,我们的Rails应用程序显示日期时间如下所示
2023年01月08日星期日16:52:46.610977000 UTC +00:00
当检查一个时间对象时,Rails控制台也会显示这一点。
有没有可能设置一个不同的日期时间格式,只为Rails控制台?

a0x5cqrl

a0x5cqrl1#

该格式是TimeWithZone#inspect的输出,它是硬编码的:

# File activesupport/lib/active_support/time_with_zone.rb, line 150
def inspect
  "#{time.strftime('%a, %d %b %Y %H:%M:%S.%9N')} #{zone} #{formatted_offset}"
end

字符串
但是Rails提供了一个console块来注册代码,这些代码只有在运行Rails控制台时才会执行(在config.console的文档中偶然提到)。你可以在运行console时使用它来提供你自己的inspect方法,例如:

# config/application.rb

module YourApp
  class Application < Rails::Application

    console do
      # this block is called only when running console

      class ActiveSupport::TimeWithZone
        def inspect
          time.strftime('%Y-%m-%d %H:%M:%S')
        end
      end
    end

  end
end
$ bin/rails console
Loading development environment (Rails 7.0.6)
irb(main):001:0> Time.current
=> 2023-07-20 12:36:10

的数据
其他rails执行上下文不受影响:

$ bin/rails runner 'p Time.current'
Thu, 20 Jul 2023 12:38:47.934270000 CEST +02:00


请注意,Time.current是一个Rails方法,它(通常)返回ActiveSupport::TimeWithZone的示例,而不是Ruby内置的Time类的示例。
虽然Rails没有改变Time#inspect,但它改变了Ruby内置类DateDateTimeinspect方法,以使它们更具可读性,请参阅core_ext/date/conversions.rbcore_ext/date_time/conversions.rb。如果需要,您也可以通过修补这些类来提供自己的inspect实现以供控制台使用。
但请记住,修补类和更改现有行为总是有破坏某些东西的风险。

相关问题