PostgreSQL и Hibernate: как мне отформатировать вывод метки времени? - PullRequest
0 голосов
/ 28 февраля 2011

У меня есть БД 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

Это формат, который я хочу.

Однако, когда я выполняю тот же запрос выбора через код Java, который использует Hibernate, я получаю следующее:

 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 ...

возможно, но менее желательно, так как у меня есть несколько мест в коде, которые запрашивают данные, и я не хочу менять каждое из них, я хотел бы, чтобы определение было общесистемным.

Спасибо за вашу помощь.


EDIT:

Я хотел добавить пояснение: когда я писал это, я думал о направлении редактирования файла сопоставления. Я думал, что там может быть способ определить формат там. Это будет означать изменение только в одном месте и не полагаться на какой-либо формат по умолчанию.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

Я думаю, что использование форматера даты всегда хорошая идея.

Date t_time = table1Entity.t_time;
String t_time_str = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(t_time);
1 голос
/ 28 февраля 2011

возможно, но менее желательно, так как у меня есть несколько мест в коде, которые запрашивают данные, и я не хочу менять каждое из них, я хотел бы, чтобы определение было общесистемным.

У вас есть временная метка в вашей базе данных (не varchar). У вас есть «временная метка» в Java (не String, вероятно, Date или Calendar). Разница в строковом / текстовом представлении, которое клиент предоставляет вам, будь то psql, метод toString () вашего Java-объекта. Если бы вы использовали другой клиент базы данных, держу пари, что результатом будет третий вариант :-)

Моя точка зрения такова: вы не должны зависеть от строкового представления дат (или любого другого нестрокового объекта). Если какой-то ваш код зависит от этого, я бы сказал, что это неправильно. Период.

И если вам нужно прикоснуться к нескольким файлам, чтобы изменить представление даты в виде текста для вашего конечного пользователя, то я бы сказал, что у вас есть возможность изменить ее: вывести внешний вид формата даты и освободить код из «фиксированной» конфигурации.

Вкратце: используйте подход всплеска.

0 голосов
/ 28 февраля 2011

Hibernate не имеет тип данных timestamp with time zone, у него есть timestamp и timezone, но он занимает два поля, а не только одно поле.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...