所以,我有一个 XML 文件,我使用 dbUnit 作为数据源,其中有一些日期。文件中的日期是这样的:“2010-02-04”,但是一旦它被加载并且我访问它以在测试中打印或比较,它认为日期是“2010-02-03 23:00”。
我猜这与 EDT/EST 有关,但我不确定如何强制 dbUnit(或可能休眠?)使用正确的时区。
有人对 dbUnit 和日期有任何经验吗?
谢谢,彼得
编辑
好吧,我很确定,出于某种原因,它会将日期读取为 EDT,这是正确的,然后将其存储为 EST,这在技术上是不正确的(我们在这里是 EDT),但在我的计算机上是正确的说是EST。这种转换导致日期“丢失”一个小时。不知道为什么 Java 认为我们是 EST(Windows XP 知道我们不是),并且不确定为什么 dbUnit 认为日期应该是 EDT,因为它和 Java 一样,可能应该将不正确的时区读取为 EST。这很令人困惑。
编辑 我把 Hibernate XML 拿出来,因为那不是问题。经过更多的探索,这里发生了什么事: 1. dbUnit 从源 XML 读取日期作为字符串并将其转换为 java.sql.Date。从本质上讲,这些不存储小时/分钟/秒,但是当您查看毫秒时,它显然被调整了 4 小时,以表明虽然在 EDT 是午夜,但在 UTC 是凌晨 4 点。此外,这由日历支持,该日历的时区标记为“美国/纽约”或其他类似名称。我记不清了。2. 每当我打印这个日期时,我的系统,它认为它是美国东部标准时间,它会将世界标准时间凌晨 4 点重新转换为前一天晚上 11 点,这是正确的,除非我们不在美国东部标准时间。3. 每当我自己创建一个日期进行测试时,价值5小时的毫秒来区分它和 UTC。显然,这些是不同的“日期”,它失败了。
所以,我猜真正的问题是双重的: 1. 为什么我的控制台认为它是 EST?据我所知,我的 Windows XP 设置是正确的。我知道在 Java 1.4 中曾经有一个问题导致错误的 TZ,但我认为这已经修复并且我正在运行(据说)1.6。2. 为什么dbUnit,它是在同一个JVM中使用正确的花式TZ。
我想我可以停止一起使用日期,但我不一定有那种奢侈。