ruby-on-rails - 为什么 Rails 以 UTC 存储时间?

标签 ruby-on-rails ruby-on-rails-3

通常,Rails 以 UTC 时间将所有时间存储在数据库中。如果您将时区设置为其他时区,则当您保存到数据库或从中检索时,它会在该时区和 UTC 之间自动转换。

这种方法有哪些优点?有什么缺点吗? 有没有办法让 Rails 使用不同的时区?

一些优点可能是:

  • UTC 消除季节性时间变化的歧义
  • 您可以向不同的用户显示不同的时区,同时保持数据库中的内容一致

  • 我能想到的唯一缺点是,对于所有用户实际上都在同一时区的内部应用程序,这种差异使得基于本地时间运行原始 SQL 查询变得更加困难。

    最佳答案

    这个问题有点宗教的感觉,但我将根据我的个人经历来回答。

    始终以明确的形式存储日期。在 UTC 中存储日期几乎是这方面的标准。

    好处:

  • 您可以对数据库中的日期时间进行简单的数学运算,而无需对其进行转换。
  • 您可以在表示层调整日期的显示
  • Web应用程序可以使用一点javascript来显示本地时间

  • 缺点:
  • 您需要将所有时间转换为显示的“本地”时间
  • 本地时间 <-> UTC 转换会产生少量处理损失

  • 你能让 Rails 做一些不同的事情吗?可能,但我从未尝试过,因为与恕我直言是一个明智的设计作斗争实在是太费事了。

    从“仅使用我的时区”意义上使用 UTC 是否有意义?是的。你的服务器可能在加利福尼亚,你的用户在纽约,在这种情况下谁决定本地时间。服务器?用户?迈克,谁刚好在伦敦出差一周?在这种情况下,您使用什么时区?

    关于ruby-on-rails - 为什么 Rails 以 UTC 存储时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9609522/

    相关文章:

    sql - 什么是数据类型以及使用数据类型的示例 - 引用资料

    ruby-on-rails - 如何让特定用户(不是 current_user)在 rails-devise 网站上注销?

    ruby-on-rails - rails 中的 Omniauth-twitter:OAuth::Unauthorized 401

    ruby-on-rails - 识别在 Ruby 中附加 '#' 的所有数字

    ruby-on-rails - 通过以下方式提前加载嵌套关联、belongs_to 和 has_one

    ruby-on-rails - Rails 3 + 迁移中的设计错误 : undefined method timeoutable

    ruby-on-rails - rake 中止! ActiveRecord::Base:Class 的未定义方法 `migration_error='

    jquery - 使用 JQuery-File-Upload 和 Paperclip 时出现多个文件上传错误

    ruby-on-rails - 从 View 中无法访问帮助程序类

    ruby-on-rails - 无效的多字节字符 (UTF-8) 错误,Ruby