sql.Timestamp 从日历转换时出现 1 秒错误

sql.Timestamp 1 second error when converting from Calendar

场景
我正在修改一个应用程序,并且有一个我无法修改的糟糕数据库。在其中一种情况下,我复制了一个实体,我需要在没有时间的情况下放置今天的日期。

我尝试了什么
根据 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);