sql.Timestamp 从日历转换时出现 1 秒错误
sql.Timestamp 1 second error when converting from Calendar
场景
我正在修改一个应用程序,并且有一个我无法修改的糟糕数据库。在其中一种情况下,我复制了一个实体,我需要在没有时间的情况下放置今天的日期。
- 在
MySQL
数据库中,字段是 DateTime
。
- 在
Java
实体中,字段是 Timestamp
我尝试了什么
根据 this question 这足以得到今天午夜的日期:
Calendar c = new GregorianCalendar();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
然后我只需要将它添加到我的实体中,因为 Java
字段是一个 Timestamp
我使用 Calendar::getTimeInMillis 方法:
mEntity.setDate(new Timestamp(c.getTimeInMillis()));
我也试过:
mEntity.setrDate(new Timestamp(c.getTime().getTime()));
问题
在我的数据库中,我总是多一秒钟:
2015-04-08 00:00:01
这会导致查询中按日期排序不正确。我确定我可以轻松找到解决方法,但我不想弄乱代码,而且我不明白为什么会这样。 也许我做错了什么?还是这是正常行为?
您应该尝试重置毫秒:
c.set(Calendar.MILLISECOND, 0);
场景
我正在修改一个应用程序,并且有一个我无法修改的糟糕数据库。在其中一种情况下,我复制了一个实体,我需要在没有时间的情况下放置今天的日期。
- 在
MySQL
数据库中,字段是DateTime
。 - 在
Java
实体中,字段是Timestamp
我尝试了什么
根据 this question 这足以得到今天午夜的日期:
Calendar c = new GregorianCalendar();
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
然后我只需要将它添加到我的实体中,因为 Java
字段是一个 Timestamp
我使用 Calendar::getTimeInMillis 方法:
mEntity.setDate(new Timestamp(c.getTimeInMillis()));
我也试过:
mEntity.setrDate(new Timestamp(c.getTime().getTime()));
问题
在我的数据库中,我总是多一秒钟:
2015-04-08 00:00:01
这会导致查询中按日期排序不正确。我确定我可以轻松找到解决方法,但我不想弄乱代码,而且我不明白为什么会这样。 也许我做错了什么?还是这是正常行为?
您应该尝试重置毫秒:
c.set(Calendar.MILLISECOND, 0);