gpt4 book ai didi

ruby-on-rails - Ruby on Rails 和 Active Record 独立脚本不同意 :timestamps 的数据库值

转载 作者:搜寻专家 更新时间:2023-10-30 20:33:09 24 4
gpt4 key购买 nike

我今天早些时候发布了一个问题,当时我还没有完全解决这个问题。我会在这里更简洁。

我在 Windows 上使用 MySQL 运行 RoR 2.1.2。 SQL 服务器的 native 时区是 UTC。我本地的时区是太平洋 (-0800)

我有一个带有 :timestamp 类型列的模型,我可以用它来做这样的事情:

record = Record.find(:first)
record.the_time = Time.now()

当我在数据库中执行“select * from records”时,显示的时间比我的本地时间提前八小时,这是正确的,因为数据库是在 UTC 上。 (我已经通过简单的“select now()”和“select utc_timestamp()”验证了它是“在 utc 中思考”)

这就是麻烦的开始。如果我在 View 中显示时间:

<%= 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

...八小时的时间扭曲。为什么存储时间可以正确翻译,但检索时间却不能?如果我将数据库中最近存储的时间进行比较,并将其与当前时间进行比较,则当前时间更短 - 告诉我这不仅仅是一个字符串转换问题。

有什么想法吗?

最佳答案

config/environment.rb 中有一个设置时区。可能这在您的脚本中设置不一样:

# Make Time.zone default to the specified zone, and make Active Record store time values
# in the database in UTC, and return them converted to the specified local zone.
# Run "rake -D time" for a list of tasks for finding time zone names. Uncomment to use default local time.
config.time_zone = 'UTC'

您也可以尝试明确指定 TZ 和格式:

require 'active_support/core_ext/date/conversions'
record.the_time.utc.to_s(:db)

(如果您没有在独立脚本中使用 active_support,或者欺骗并从那里获取代码片段)

关于ruby-on-rails - Ruby on Rails 和 Active Record 独立脚本不同意 :timestamps 的数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com