У меня есть эта дата в базе данных PostgreSQL 9.1 в столбце timestamp without time zone
:
2012-11-17 13:00:00
Это означает, что он находится в формате UTC, и это я проверял, выбрав его как временную метку UNIX (EXTRACT epoch
).
int epoch = 1353157200; // from database
Date date = new Date((long)epoch * 1000);
System.out.println(date.toGMTString()); // output 17 Nov 2012 13:00:00 GMT
Однако, когда я читал эту дату с использованием JPA/Hibernate, все идет не так. Это мое отображение:
@Column(nullable=true,updatable=true,name="startDate")
@Temporal(TemporalType.TIMESTAMP)
private Date start;
Date
Я получаю, однако, следующее:
17 Nov 2012 12:00:00 GMT
Почему это происходит, и что более важно, как я могу остановить его?
Обратите внимание, что я просто хочу хранить точки во времени, повсеместно (как это делает java.util.Date
), и мне было все равно, о часовых поясах, за исключением того, что я, очевидно, не хочу, чтобы они повреждали мои данные.
Как вы, вероятно, вывели, клиентское приложение, которое подключается к базе данных, находится в UTC + 1 (Нидерланды).
Кроме того, выбор типа столбца timestamp without time zone
был сделан Hibernate, когда он автоматически сгенерировал схему. Может быть, это может быть timestamp with time zone
вместо?