Ruby on rails 在rails中检索时间戳时,它将被转换或向下舍入。我如何防止这种情况?

Ruby on rails 在rails中检索时间戳时,它将被转换或向下舍入。我如何防止这种情况?,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我在我的数据库中有一个完整的_at列,其值分别为2021-03-05 00:17:31.059123,和2021-03-05 00:08:00.257058,但当我检索此列时,它将分别显示/显示Thu,2021年3月4日16:17:31太平洋标准时间-08:00,以及Thu,2021年3月4日16:08:00太平洋标准时间-08:00 它在我的数据库中显示得如何?它显示的是2021年3月5日,但当我检索数据时,它显示的是2021年3月4日。有没有办法防止这种情况 Ruby版本:2.3.6 Rai

我在我的数据库中有一个完整的_at列,其值分别为
2021-03-05 00:17:31.059123
,和
2021-03-05 00:08:00.257058
,但当我检索此列时,它将分别显示/显示
Thu,2021年3月4日16:17:31太平洋标准时间-08:00
,以及
Thu,2021年3月4日16:08:00太平洋标准时间-08:00

它在我的数据库中显示得如何?它显示的是2021年3月5日,但当我检索数据时,它显示的是2021年3月4日。有没有办法防止这种情况

Ruby版本:2.3.6

Rails版本:4.2.6


Postgres版本:9.6

,这是因为Rails使用您的应用程序时区(请参见
Time.zone
),但当日期存储在数据库中时,则存储在UTC中。因此,如果您检查数据库上的时间戳,例如,使用GUI检查表及其行,您将在UTC中看到该日期

尝试将你的应用程序时区设置为其他时区。打开rails控制台,并使用它:

irb(main):001:0> Time.zone
=> #<ActiveSupport::TimeZone:0x00007ff13688d180 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>>

irb(main):002:0> User.last.created_at
  User Load (2.7ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> Tue, 26 Jan 2021 13:47:58.769517000 UTC +00:00

irb(main):003:0> Time.zone = "Alaska"
=> "Alaska"

irb(main):004:0> User.last.created_at
  User Load (0.4ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> Tue, 26 Jan 2021 04:47:58.769517000 AKST -09:00

irb(main):006:0> User.last.created_at.utc
  User Load (0.3ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> 2021-01-26 13:47:58.769517 UTC
irb(main):001:0>时区
=>#和


您还可以查看和的文档。

这是因为Rails使用您的应用程序时区(请参见
Time.zone
),但当日期存储在数据库中时,则以UTC存储。因此,如果您检查数据库上的时间戳,例如,使用GUI检查表及其行,您将在UTC中看到该日期

尝试将你的应用程序时区设置为其他时区。打开rails控制台,并使用它:

irb(main):001:0> Time.zone
=> #<ActiveSupport::TimeZone:0x00007ff13688d180 @name="UTC", @utc_offset=nil, @tzinfo=#<TZInfo::DataTimezone: Etc/UTC>>

irb(main):002:0> User.last.created_at
  User Load (2.7ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> Tue, 26 Jan 2021 13:47:58.769517000 UTC +00:00

irb(main):003:0> Time.zone = "Alaska"
=> "Alaska"

irb(main):004:0> User.last.created_at
  User Load (0.4ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> Tue, 26 Jan 2021 04:47:58.769517000 AKST -09:00

irb(main):006:0> User.last.created_at.utc
  User Load (0.3ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" DESC LIMIT $1  [["LIMIT", 1]]
=> 2021-01-26 13:47:58.769517 UTC
irb(main):001:0>时区
=>#和


您还可以查看和的文档。

由于时区的原因,您可以为Rails应用程序配置它。@Eyeslandic您知道在Rails文档中哪里可以找到它吗?它是日期时间吗?这里有一个例子,因为时区的原因,你可以为你的Rails应用程序配置它。@Eyeslandic你知道我在Rails文档的哪里可以找到它吗?是日期时间吗?这里有一个例子