MySQL中datetime类型23:59:59变成下一天的00:00:00

1、现象
MySQL表某个datetime类型,存储2025-03-15 23:59:59,存储成功后,DB表字段值进到第二天的00:00:00,比如2025-03-16 00:00:00。

2、原因
datetime的精确度是毫秒,数据库入库时会有500ms的进位,加上程序给变量赋值的耗时大概率会超500ms。DB的datetime类型,四舍五入,就会存成第二天的00:00:00

3、解决

3.1 实时工具偏移
采用Hutool工具包,方便的进行时间的管理和转换,DateUtil Hutool官网将生成的时间往前偏移999毫秒即可。示例:DateUtil.endOfDay(DateUtil.date()).offset(DateField.MILLISECOND, -999)。

3.2 修改java代码逻辑-设置毫秒级为0

Calendar calendar = Calendar.getInstance();
     calendar.set(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),23,59,59);
        calendar.set(Calendar.MILLISECOND,0);
        Date date = calendar.getTime();

3.3 修改DB字段
ALTER TABLE your_table MODIFY COLUMN your_column DATETIME(3);
提高数据存储的精度到毫秒
DATETIME(3) 记录的数据是 2025-03-15 23:59:59:59,精确到毫秒 。
取数据的时候按照需要的格式,格式化下即可。如果是单纯的时间对比 存储的可以直接用 不用处理~

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容