背景
最近遇到一个坑,创建数据的时候,数据有效时间:new Date,然后响应后,立刻拿这个时间来反查,查不到数据
原因
在使用new Date() 插入数据库时,查询出来比实际多了一秒,mysql 表字段设置为datetime类型,当时间精确到秒时,如果毫秒大于500时,会自动进位。
测试
public static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 8; i++) {
System.out.println(df.format(new Date()));
Thread.sleep(100);
}
}
解决方法
/**
* 解决Date存入数据库中毫秒>500时进一位。
*/
public static Date nowDb() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
测试
public static SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 8; i++) {
System.out.println(df.format(nowDb()));
Thread.sleep(100);
}
}
/**
* 解决Date存入数据库中毫秒>500时进一位。
*/
public static Date nowDb() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}