PostgreSQL和Hibernate:如何格式化时间戳输出?

时间:2011-02-28 13:40:18

标签: hibernate postgresql timestamp

我有一个Postgres数据库,其中一列名为t_time,类型为timestamp with time zone

当我使用psql工具查看列的内容时,我得到了,例如:

select t_time from table1 where  ...

       t_time      
---------------------
 2011-02-28 14:09:25
 2011-02-28 14:09:23

这是我想要的格式。

但是,当我通过使用Hibernate的Java代码运行相同的select查询时,我得到以下内容:

 2011-02-28 14:09:25.0
 2011-02-28 14:09:23.0

如您所见,最后添加了一个点和一个零。

我的问题是 - 如何指定我想要使用的格式?

更改查询,例如,

select to_char(t_time, 'YYYY-MM-DD HH24:MI:ss') as t_time from table1 where ...

是可能的,但不太理想,因为我在代码中有一些查询数据的地方,我不希望改变它们,我希望这个定义是系统范围的。

感谢您的帮助。


编辑:

我想补充说明:当我写这篇文章时,我正在考虑编辑映射文件的方向。我认为可能有一种方法来定义那里的格式。这意味着仅在一个地方进行更改,而不是依赖于任何默认格式。

感谢。

3 个答案:

答案 0 :(得分:3)

我认为使用日期格式化程序总是一个好主意。

Date t_time = table1Entity.t_time;
String t_time_str = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(t_time);

答案 1 :(得分:1)

  

是可能的,但不太理想,因为我在代码中有一些查询数据的地方,我不希望改变它们,我希望这个定义是系统范围的。

您的数据库中有一个时间戳(非varchar)。您的Java中有一个“时间戳”(非字符串,可能是日期或日历)。不同之处在于客户端为您提供的字符串/文本表示形式,无论是psql,还是Java对象的“toString()”方法。如果您使用了不同的数据库客户端,我打赌输出将是第三种变体:-)

我的观点是:你不应该依赖于日期的字符串表示(或者任何其他非String对象)。如果您的任何代码依赖于此,我会说这是错误的。周期。

如果您需要触摸多个文件来更改日期作为最终用户的文本的方式,那么我会说您有机会进行更改:将日期格式外部化并释放您的代码来自“固定”配置。

简而言之:使用splash的方法。

答案 2 :(得分:0)

Hibernate没有数据类型timestamp with time zone,它有timestamptimezone但是它有两个字段,而不仅仅是一个字段。

http://www.java2s.com/Code/Java/Hibernate/JavaTypeVSHibernateType.htm