mysql - Rails 服务器上的时间

标签 mysql ruby-on-rails time timezone

所以...我在带有时间戳的表中插入了一个条目。该条目已完美插入。 但插入的时间戳是:

'2015-06-22 10:32:47'

我检查了服务器上的时间:

Tue Jun 23 01:35:41 IST 2015

在 mysql 内部:

select now();
2015-06-23 01:33:57

所以我检查了 irb 中的时间。

time = Time.now
=> 2015-06-23 01:36:41 +0530
time.zone
=> "IST"

时区是正确的..但我不知道它从哪里获取时间?我不知道 10:32 是从哪里获取的?我该如何解决它?

感谢您的所有帮助。

最佳答案

Rails 在设计上会先将日期时间转换为 UTC,然后再将值插入数据库。

这是因为,一般来说,不可能轻松地在数据库中表示时区。此外,这种方法保证在以下情况下日期一致和/或易于查询:

  • 如果服务器时区发生变化或者您更改了不同时区的服务器
  • 如果您想使用不同时区查询日期
  • 如果您想根据用户或其他配置设置不同时区的日期格式

您可以自定义应用程序的默认时区,以便在将值存储到数据库中时,Rails 能够正确计算与 UTC 的正确差异。但是,您无法更改此行为:时间在存储到数据库之前始终会转换为 UTC。

一般来说,如果您正确使用 Rails 日期转换助手,这不会导致任何问题。

例如,如果要查询该时间过去的所有记录,则如下查询

Record.where('some_date < ?', Time.current)

将正确地将 Time.current 从您的应用时区转换为 UTC,并相应地查询数据库。

关于mysql - Rails 服务器上的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30978058/

相关文章:

php - 从表中选择,其中列是 PHP 中的外键

ruby-on-rails - 检查用户是否来自给定 IP block 和重定向的最简单方法?

python - 将字符串转换为 datetime.time 对象

ruby-on-rails - Rails 3.1 升级后的 ActionView::MissingTemplate

ruby-on-rails - Rails 4 应用程序中未定义的方法类 `all'

time - 有没有人推荐一个好的任务/时间管理工具?

php - MySQL 按 (Varchar) 时间选择

php - 如何在mysql中将下拉列表的选定值存储为id

php - MySQL 日期格式(德语)

php - 如何限制 SHOW TABLES 查询