看起来(也许我错了),如果您想要保留JDBC和Postgres发生的事情的时区,您需要将时区与时间戳分开存储。
也就是说,我更愿意给我的ORM/JDBC/JPA一个Java日历
(或Jodadatatime
),其中包括时间区域America/New_York
到Postgrestimestampz
字段。我希望在检索时,不管服务器的时区(或默认为UTC)如何,都能返回一个日历
,时区为America/New_York
。但只需看看大多数JDBC代码(以及依赖于它的事情不会发生)。
这是正确的吗?
当postgres支持tz时,我需要将tz存储在另一个字段中,这似乎很荒谬。
因此,似乎只有两种选择:
timestampz
Postgres列作为java.util.String
并解析它。第一个选项和第二个选项需要为我的SQL mapping/ORM库提供某种类型的转换拦截器。
EclipseLink支持将时区存储在Oracle中,我认为如果您定制了PostgreSQL平台,也可以将时区存储在Postgres中。
当使用时区存储时间戳(
timestamptz
)时,它会转换为UTC存储在DB中。检索时,它将转换为客户端的当前时区,而不是它最初所在的时区。基本上是个时间点。
还有不带时区的
时间戳
(时间戳
)。这不需要转换,但不带有时间戳。如果您存储的timestamp
的客户端时区设置为UTC,然后在客户端时区为'+08:00'时检索它,则会得到相同的值。这是您想要的一半,因为它保留了原始时间值。
名称和行为是可怕和混乱的,但由SQL标准设置。
如果希望记录特定时区的时间点,则必须单独存储时区。我建议将其存储为
之间的INTERVAL
,并使用check
约束将其限制为间隔“-12”小时+间隔“1”秒和间隔“12”小时colname。该定义拒绝-12:00,接受+12:00;我不是很确定这是对的,所以检查一下。
您可以在该时区存储本地时间的
timestamp
(我可能会这样做),或者存储事件发生时的UTC时间的timestamptz
以及允许您将其转换为本地时间的偏移量。
对于JDBC两者都可以很好地工作。对于JPA,这将取决于您的提供者理解和映射间隔类型的程度。理想情况下,您希望实体中有一个瞬时生成的字段,该字段使用数据库中存储的
timestamp
和interval
重建您想要的日历实例。
我不太理解时间戳的用法, 例如 用户创建文章,他们可以选择,系统也会自动存储。 a.我是否应该使和具有时区并设置UTC的时间戳? b.用户post字符串,然后将其转换为utc时间戳,如下所示使用并存储,当某人选择这一行时,将其显示为用户客户端时间反向使用 c.我使用到,是不是意味着服务器时间?我做得对吗? 我的想法是,我总是在数据库中插入utc时区时间戳,无论用户/客户端读取的地方,都将数据转换为
问题内容: 我有下面的简单表: 我想了平均,并且每一天为6个小时桶。例如00:00至06:00、06:00至12:00、12:00至18:00和18:00至00:00。 我可以使用以下查询按年,月,日和小时分组: 但是我无法将每天分为上述4个时段,非常欢迎您提供任何帮助。 问题答案: 我认为将(商的小时数/ 6)的商的整数值分组应该会有所帮助。试试看,看看是否有帮助。您的分组依据应该是 其背后的逻
假设我有一个时间戳值。 编辑 现在我正在使用获取上述时间的毫秒值; 根据Java文档,getTime()方法的定义是
问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期为太平洋标准时间(PST)2008-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下530pm是UTC 530pm。显示时,它将被格式化
问题内容: 我使用了一个新的Date()对象来填充MySQL DB中的一个字段,但是存储在该字段中的实际值在我的本地时区中。 如何配置MySQL以将其存储在UTC / GMT时区? 我认为,配置连接字符串会有所帮助,但我不知道如何。连接字符串中有许多属性,例如useTimezone,serverTimzone,useGmtMillisForDatetimes,useLegacyDatetimeCo
问题内容: 如何配置JPA /hibernate模式以UTC(GMT)时区在数据库中存储日期/时间?考虑以下带注释的JPA实体: 如果日期是太平洋标准时间(PST)2018-Feb-03 9:30 am,那么我希望数据库中存储2008-Feb-03 5:30 pm的UTC时间。同样,从数据库中检索日期时,我希望将其解释为UTC。因此,在这种情况下,530pm是UTC 530pm。显示时,它将被格式