JavaLocalTimeprecision/***Themaximumsupported{@codeLocalTime},'23:59:59.999999999'。*这是一天结束时午夜之前的时间。*/publicstaticfinalLocalTimeMAX;查看LocalTime的方法注释,明确表示精度为小数点后9位,最大为.999999999。MySQLDateTimeprecision5.7之后的版本可以在默认的秒精度内有小数,最多6位小数,即可以精确到微秒(6位)精度。类型范围RemarkDATETIME'1000-01-0100:00:00.000000'到'9999-12-3123:59:59.999999''YYYY-MM-DDhh:mm:ss[.fraction]'TIMESTAMP'1970-01-0100:00:01.000000'to'2038-01-1903:14:07.999999''YYYY-MM-DDhh:mm:ss[.fraction]'DATETIME时间精度为小数点后6位,最大值为.999999查询返回不正确的结果。如果使用LocalTime作为查询条件代入查询SQL,由于LocalTime的精度超过了DateTime的精度,此时假设查询条件为2021-01-0100:00:00~2021-01-0123:59:59.999999999(结束时间由框架根据LocalTime.MAX变量自动转换),查询结果会包含2021-01-0200:00:00的数据,会导致错误的结果,因为2021-01-0200:00:00的数据不是我们想要的。解决方法可以是调用LocalTime.MAX时手动指定精度为6位:LocalTime.MAX.withNano(999999000);例如前一小时的最大时间:LocalDateTime.now().with(LocalTime.MAX).withHour(LocalDateTime.now().minusHours(1).getHour()).withNano(9999——————————————————版权声明:本文为CSDN博主“tlojy”原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。
