我正在开发一个项目,需要获取新客户创建帐户的时间,然后将该时间保留在数据库中以供以后使用。但是,我不太了解postgresql的时间戳数据类型?它是一个相对于java的字符串日历或日期对象(你可以给我一个插入和检索的例子)吗?
最佳答案
正如 @MadProgrammer 提到的,Timestamp
和 Date
在 Java 和 Postgres 中都是不同的。虽然可以使用 java.sql.Timestamp,但我通常将 POJO 中的 Postgres 时间戳表示为 改为字符串
。
这样做的原因是它消除了许多与时间戳相关的潜在问题(时区、不同格式等),因为人们可以简单地使用Postgres> 时间戳
的文本表示,它仍然可以与Postgres来回传递。此规则的异常(exception)情况是,如果您确实需要它真正成为 Java 端的 Timestamp
,因为,比如说,您是 ETL将其从 Postgres 外部转移到其他平台,因此不能像从 获取数据时那样依赖 Postgres 文本表示形式Postgres 并将其放回 Postgres。
假设您的时间戳为 2014-08-08 02:11:21.215428
,表格如下:
create table foo
(
id serial,
created timestamp without time zone default now(),
notes text
);
您可以在POJO中表示如下:
class FooBean
{
int id;
String created;
String notes;
};
要记住的关键是,如果您要在另一个查询中使用该值,则需要将其转换回时间戳
(即notes::timestamp
),否则 Postgres 将抛出强制转换异常。
编辑以回应OP的评论:
此方法也有助于掩盖与时区相关的头痛。时区也可以以文本方式表示,只需在字符串上使用 -XX
表达式即可。例如,无时区字符串 2014-08-08 02:11:21.215428
可以通过字符串 2014-08-08 02:11:21.215428-04
表示时区>.
正如 @MadProgrammer 在下面的评论中提到的,Postgres 也有一个带有时区的时间戳类型;对于上面的例子,我只是碰巧选择了没有的。
关于java - postgresql Date 如何关联 java Date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25196871/