gpt4 book ai didi

java - 将时间或日期类型的信息保存到数据库中的正确方法是什么?

转载 作者:行者123 更新时间:2023-11-29 12:45:26 25 4
gpt4 key购买 nike

在数据库中保存基于日期或时间的数据的正确方法是什么?java 到 postgresql(或其他数据库)的正确“字段映射”是什么?

该数据应以不带时区的 utc 格式存储。

-> 基于时间戳和日期的东西在这里失败了,那些将添加当前时区 ( http://docs.oracle.com/javase/7/docs/api/java/util/Date.html )

->还有哪些选择?

我应该使用“plain epoch/integer”列和其他时区列吗?但是我不能使用数据库为我提供的所有功能等。

我可以使用 hibernate 和一些 jodatime 魔法,但在我当前的堆栈中我没有使用 hibernate。

可能的解决方案:

1).更改计算机/java 时区 -> java 将在 UCT 中(例如 export TZ="GMT"或 -Duser.timezone=UCT)

2).在日期/时间字段/类型中使用 epoch/Integer/Long 值 -> 有效,但现在我无法使用内置数据库函数。

3).将 Jodatime 与自定义 hibernate 数据类型一起使用?

4).使用 Java8 新的时间和日期 api?

最佳答案

在大多数情况下,最好使用 Postgres 数据类型 timestamptz (timestamp with time zone 的缩写)在处理多个时区时或当您想将所有时间戳保存为 UTC 时。

不要让名称误导您,时区 实际上并未保存。但是(与 timestamp [without time zone] 不同)文本输入的时区被认为是计算实际 UTC 时间戳值的修饰符,该值被保存。
输出上,值的文本表示根据您的当前时区设置进行格式化:时间戳被移动并附加了相应的时区修饰符。

请注意,没有附加时区的时间戳将根据 session 的当前时区设置进行解释。如果您想输入一个忽略当前时区的 UTC 文字值,它必须是:

'2014-08-21 16:39:09+0'::timestamptz

不是:

'2014-08-21 16:39:09'::timestamptz  -- would assume current time zone

这个相关回答中的详细解释:

关于java - 将时间或日期类型的信息保存到数据库中的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25420910/

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