Ruby on rails 数据库中是否有日期列的固有时区

Ruby on rails 数据库中是否有日期列的固有时区,ruby-on-rails,Ruby On Rails,我正在使用RubyonRails。使用类型datetime保存列时,会为日期和时间存储一个固有时区。类型为date的列是如何存储的,尤其是是否存在与该日期相关联的时区?活动记录尝试以UTC的形式检索所有存储的日期,尽管您可以将其配置为使用本地时间: config.active\u record.default\u timezone确定从数据库中提取日期和时间时是使用Time.local(如果设置为:local)还是Time.utc(如果设置为:utc)。默认值为:utc。 根据Garrett

我正在使用RubyonRails。使用类型
datetime
保存列时,会为日期和时间存储一个固有时区。类型为
date
的列是如何存储的,尤其是是否存在与该日期相关联的时区?

活动记录尝试以UTC的形式检索所有存储的日期,尽管您可以将其配置为使用本地时间:

config.active\u record.default\u timezone
确定从数据库中提取日期和时间时是使用
Time.local
(如果设置为
:local
)还是
Time.utc
(如果设置为
:utc
)。默认值为
:utc。


根据Garrett Motzner的评论,没有与
date
列一起存储的固有时区,而
datetime
列则与之关联。这意味着,如果用户有不同的时区,那么如果使用
日期
列,则需要手动计算时区。另一种方法是使用
datetime
列来存储日期,并对其进行处理,以说明只存储了一个日期的事实。

我有一个
Game
模型,其中有一个字段
compdate
,类型为
date
,在
创建的字段
类型为
datetime
。如果我从数据库加载一个实例,即
game=game。首先
,然后检查这两个字段,我会得到
Tue,2017年5月23日08:41:32 UTC+00:00
,该字段显式显示时区。如果我检查
compdate
字段,我会得到
Wed,2014年6月11日
,它不显示时区。那么,如果日期字段有时区,它是如何存储的呢?啊,错过了关于日期而不是日期时间的部分。嗯,约会并没有真正的时区。如果你需要一个时区,那么你真的需要一个
datetime
。您希望在
compdate
中记录的具体内容是什么?你需要一天的开始在一个特定的时区,或者一天的结束,或者两者都需要,或者其他什么吗?从api我收到一个日期和与该日期相关的时区。我正在存储时区和日期。我想确保不存在与日期一起存储的固有时区,这可能会在以后与已知时区发生冲突。是的,正如我所说,ruby和rails没有带时区的日期,尽管它们确实有带时区的时间。因此,日期没有默认的分区方式。因此,如果rails从数据库加载
Date
对象,它就不能有区域。但在处理日期时要小心,因为它们与时间有细微的不同,根据我的经验,在尝试将日期转换为时间时,我遇到了一大堆边缘情况。使用时间而不是日期通常更容易,特别是当你需要一个区域时。