我今天早些时候发布了一个问题,当时我还没有完全解决这个问题。我可以在这里更简洁。
我在 Windows 上使用 MySQL 运行 RoR 2.1.2。SQL 服务器的本地时区是 UTC。我的本地时区是太平洋 (-0800)
我有一个带有 :timestamp 类型列的模型,我可以这样做:
record = Record.find(:first)
record.the_time = Time.now()
当我在数据库中执行“从记录中选择 *”时,显示的时间比我的本地时间提前 8 小时,这是正确的,因为数据库在 UTC 上。(我已经通过简单的“select now()”和“select utc_timestamp()”验证了它是“thinking in utc”)
这就是麻烦的开始。如果我在视图中显示时间:
<%= h record.the_time %>
...然后我得到正确的时间,以 UTC 格式显示。如果我在当地时间 16:40:00 写入数据库,则数据库显示 00:40:00。
但是,如果我正在运行独立脚本:
record = Record.find(:first)
puts record.the_time
...然后我取回我存储在数据库中的 UTC 时间 (00:40:00,) 但使用本地时区:
Wed Nov 26 00:40:00 (-0800) 2008
……八小时的时间扭曲。为什么存储时间可以正确转换它,但检索它却不能?如果我比较数据库中最近存储的时间并将其与当前时间进行比较,则当前时间会更少 - 告诉我这不仅仅是字符串转换问题。
有任何想法吗?