使用JDBC获取datafomat时间时,发现当时间精度末尾等于0时,会自动舍去。
例如:
数据库中 是2023-10-18 17:06:19.247,返回是 2023-10-18 17:06:19.247。
数据库中是 2023-10-18 17:06:19.000,返回是 2023-10-18 17:06:19.0,精度丢失两位。
如上图所示,实际和数据库中存在两位的精度问题。(经过验证,其实不止是两位的精度问题,只要时间格式毫秒、微妙、纳秒,末尾有0,会被舍去)
通过debug发现在源码中获取秒以下的数据时,使用的是getInt
所以当使用方法
StringUtils.getInt(timestampAsBytes, offset + decimalIndex + 1, offset + length);
默认会存在000=0,100=1问题,导致在Assert时验证失败。
解决方法:
一个比较笨的方法,把获取的数据,后几位进行校验,符合会被截断(如果有比较好的方法欢迎@我,或者留言,谢谢)