我最近在JPA经历了很多处理时间戳的痛苦.我发现我的很多问题都通过在字段中使用TIMESTAMP而不是TIMESTAMP得到了解决.我的服务器是UTC,而JVM是PST.在使用没有时区的时间戳时,JPA几乎不可能对数据库中的UTC值进行规范化.

对我来说,我使用这些字段来表示"用户是何时创建的"、"他们上次使用设备是什么时候"、"他们上次收到alert 是什么时候"等内容.这些通常是事件,所以它们是时间类型的值.因为他们现在可以在TIMESTAMPTZ之前查询到,如果我不需要的话,我可以随时查询他们的特定区域.

所以我的问题是,对于Java/JPA/PostgreSQL服务器,我什么时候想在TIMESTAMP上使用时间戳?它的用例是什么?现在我很难理解为什么我会想使用时间戳,正因为如此,我担心我没有把握它的价值.

推荐答案

您可以用它来表示Joda Time和新的Java 8 Time API所称的LocalDateTime.LocalDateTime并不代表时间线上的精确点.它只是一组字段,从一年到纳秒.它是"对日期的描述,用于生日,与挂钟上显示的当地时间相结合".

例如,你可以用它来表示你的确切出生日期是1975年7月19日下午6点.或者,全世界都在2015-01-01 00:00庆祝下一个新年.

为了表示精确的时刻,比如阿姆斯特朗在月球上行走的时刻,带有时区的时间戳确实更合适.无论JVM的时区和数据库的时区如何,它都应该返回正确的时刻.

Postgresql相关问答推荐

Postgres BULK INSERT如何影响Debezium?

无法在PostgreSQL中创建方案和表

Postgres 13.8 -如何在对数据执行窗口操作时返回所有行

Select 所有数组类型和维度

如何在PostgreSQL中更改分区的表空间?

右连接 postgresql 出现语法错误

表示 SQL 表的 Go struct

对 Postgres 进行身份验证时如何使用自定义密码哈希算法?

无法从 docker-compose 上的其他服务解析 postgres 主机名

PostgreSQL 错误:42P01:relation "[Table]" does not exist

全文搜索(Postgres)与Elastic search

Select 日期最高的行

Postgres 默认按 id 排序 - worldship

从没有行的计数中获取 0 值

如何使用 WITH RECURSIVE 子句进行 Select

如何为 postgres 编写 DELETE CASCADE?

如何将 Heroku PG 转储导入本地机器

使用 Postgres 在 Rust 的 Diesel 库中添加时间戳

如何在 postgres 查询中排名

如何为 Postgresql 中的所有数据库创建具有只读权限的用户?