【发布时间】:2017-05-24 14:21:47
【问题描述】:
情况:有一个对象AuditLog,其中包含变量java.util.Date日期。此对象保存在 mySQL 数据库中。
@Entity
public class AuditLog implements Persistable<Long> {
...
@Temporal(TemporalType.DATE)
private Date date;
...
}
我正在编写一些 JUnit 测试,需要验证保存的日期是否等于实际日期。其中date 是在保存并再次加载之前实际传递给log 对象的值的本地副本。
Assert.assertEquals(date, log.getDate());
Output:
expected:<Wed May 24 15:54:40 CEST 2017> but was:<2017-05-24>
所以你可以看到日期实际上是正确的,但只有 y-m-d 然后我尝试了这个(如下)来检查毫秒是否被改变。
Assert.assertEquals(date.getTime(), log.getDate().getTime());
Output:
expected:<1495634973799> but was:<1495576800000>
现在我认为最好的方法是获取 year month day 的毫秒数。
问题:这可以相对简单地实现吗?我应该这样做吗?我认为 Date 会因为某种 数据库操作 而改变,所以调整 Test 是可以的,对吧?
【问题讨论】:
-
请注意,获取
Date对象的 y-m-d 取决于时区。您首先需要决定要在哪个时区执行此操作。 -
一旦您确定了时区,使用the Java 8 date and time API 会更容易、更自然。考虑升级。
-
log.getDate()返回哪种类型? -
log.getDate 返回 java.util.date 日期