Tun*_*aki 6 java mysql hibernate
我有一个简单的实体类,它有一个Date属性.此属性对应于MySQL datetime列.
@Entity
public class Entity {
@Column(name = "start_date")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date startDate;
}
Run Code Online (Sandbox Code Playgroud)
这就是我写的集成测试看起来像:
java.util.Date now = new java.util.Date();
Entity entity = new Entity();
entity.setStartDate(now);
entityService.save(entity); // save entity to database
entity = entityService.get(entity.getId()); // get entity back from database
Assert.assertEquals(entity.getStartDate(), now);
Run Code Online (Sandbox Code Playgroud)
我希望这两个日期是平等的,但事实并非如此!实际上,我有:
now.getTime() = 1350160029831
entity.getStartDate().getTime() = 1350160029000
Run Code Online (Sandbox Code Playgroud)
所以两个日期之间有一个小的差距.我真的很想知道这个差距可能来自哪里.它并不总是相同的,每次我开始测试过程都会有所不同.在我的数据库中,存储的日期是2012-10-13 22:15:38.0.
我真的需要在某处清除毫秒吗?
来自MySQL 文档:
\n\n\n\n\nDATETIME 或 TIMESTAMP 值可以包含尾随小数秒部分,精度高达微秒(6 位数字)。尽管可以识别该小数部分,但它会从存储到 DATETIME 或 TIMESTAMP 列中的值中被丢弃。有关 MySQL 中小数秒支持的信息,请参阅第 11.1.5.6 节,\xe2\x80\x9c时间值\n\n时间值\xe2\x80\x9d 中的小数秒。
\n
请注意,无论如何您都不应该使用 equals 来比较日期,因为各种 Date 子类都有错误的实现,这会导致以下问题a.equals(b) && !b.equals(a):
java.util.Date d1 = java.sql.Date.valueOf("2012-01-01");\njava.util.Date d2 = new java.util.Date(d1.getTime());\njava.util.Date d3 = new java.sql.Timestamp(d1.getTime());\n\nSystem.out.println(d1.equals(d2)); // true\nSystem.out.println(d2.equals(d1)); // true\nSystem.out.println(d1.equals(d3)); // true\nSystem.out.println(d3.equals(d1)); // false\nSystem.out.println(d2.equals(d3)); // true\nSystem.out.println(d3.equals(d2)); // false\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1666 次 |
| 最近记录: |