【问题标题】:Rails: print UTC time by defaultRails:默认打印UTC时间
【发布时间】:2014-01-22 22:12:47
【问题描述】:

我有一个非 ActiveRecord 服务器正在向另一个服务发送数据。该服务器希望接收格式为:"%Y-%m-%d %H:%M:%S.%L" 的指令,包括 UTC。我已经有一个覆盖Time::DATE_FORMATS[:default] 的time_format.rb 初始化程序有没有一种方法可以配置我的服务器,以便Time.now.to_s 默认打印UTC 时间,而无需我每次调用它时都指定Time.now.utc?我正在使用 ruby​​ 2.0.0 和 Rails 4。

我尝试将config.time_zone = 'London' 添加到config/application.rb,但没有成功。

【问题讨论】:

  • 如何定义一个名为 time_now 的新方法,它调用 Time.now.utc?
  • 您可以通过重写 Time 类中的 now 方法来实现。
  • config.time_zone = 'UTC'怎么样?

标签: ruby-on-rails ruby timezone


【解决方案1】:

我不认为 ActiveRecord 应该与它有任何关系,但也许我误解了。正如 Sergio 所说,将您的应用程序时区设置为 UTC。

这是我的 Rails 应用程序。我的电脑在太平洋标准时间。我的 Rails 应用程序设置为 UTC。

 > Time.now
 => 2014-01-22 21:52:38 -0800
 > Time.zone.name
 => "UTC"
 > Time.zone.now
 => Thu, 23 Jan 2014 05:52:43 UTC +00:00
 > Time.now.utc
 => 2014-01-23 05:52:45 UTC

我强烈建议不要覆盖 Time.now。那只会导致阴暗面。

【讨论】:

  • 我希望避免显式指定 Time.utc,但我找不到任何其他方式。
【解决方案2】:

适用于任何 Ruby 应用程序的通用解决方案:

module TimeClassExtensions
  def now
    super.utc
  end
end

Time.singleton_class.prepend(TimeClassExtensions)

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多