Итак, у меня есть XML-файл, который я использую с dbUnit в качестве источника данных, и в нем есть некоторые даты.Дата в файле выглядит примерно так: «2010-02-04», но как только она загружается, и я получаю доступ к ней для печати или сравнения в тестах, она думает, что это «2010-02-03 23:00».
Я предполагаю, что это связано с EDT / EST, но я не уверен, как заставить dbUnit (или, возможно, hibernate?) Использовать правильный часовой пояс.
Кто-нибудь имеетлюбой опыт работы с dbUnit и датами?
Спасибо, Питер
РЕДАКТИРОВАТЬ
Хорошо, я уверен, что по какой-то причине он считывает дату как EDT, и это правильно, затемхранить его как EST, что не является технически правильным (мы здесь EDT), но верно для моего компьютера, который говорит, что это EST.Это преобразование приводит к тому, что дата «теряет» час.Не уверен, почему Java думает, что мы EST (Windows XP знает, что мы нет), и вдвойне не уверен, почему dbUnit считает, что дата должна быть EDT, поскольку, как и Java, она, вероятно, должна считывать неправильный часовой пояс как EST.Это довольно странно.
РЕДАКТИРОВАТЬ Я взял XML Hibernate, потому что это не проблема.После дальнейших осмотров, вот что происходит: 1. dbUnit считывает дату как строку из исходного XML и преобразует ее в java.sql.Date.По своей природе они не хранят часы / минуты / секунды, но когда вы смотрите на миллис, он явно корректируется на 4 часа, чтобы показать, что, хотя здесь, в EDT, полночь, в UTC 4 часа утра.Кроме того, это поддерживается календарем, который имеет часовой пояс с надписью «Америка / Нью-Йорк» или что-то эквивалентное.Я не могу точно вспомнить.2. Всякий раз, когда я печатаю эту дату, моя система, которая считает, что это EST, реконвертирует 4:00 UTC до 23:00 предыдущего дня, что было бы правильно, если только мы не в EST.3. Всякий раз, когда я сам создаю дату для тестирования в качестве примера, поскольку моя JVM считает, что мы находимся в EST, она добавляет пять часов в миллис, чтобы сделать разницу между ней иУНИВЕРСАЛЬНОЕ ГЛОБАЛЬНОЕ ВРЕМЯ.Ясно, что это разные «даты», и они терпят неудачу.
Итак, реальный вопрос, я думаю, двоякий: 1. Почему моя консоль считает, что это EST?Насколько я знаю, мои настройки Windows XP верны.Я понимаю, что раньше в Java 1.4 была проблема с неправильным TZ, но я думаю, что это было исправлено, и я работаю (предположительно) 1.6.2. Почему dbUnit, который находится в той же JVM, использует правильный модный TZ.
Полагаю, я мог бы прекратить использовать даты все вместе, но у меня нет такой роскоши.