Date时间类丢失毫秒精度

您所在的位置:网站首页 毫秒对时校准 Date时间类丢失毫秒精度

Date时间类丢失毫秒精度

2023-06-28 15:40| 来源: 网络整理| 查看: 265

在做定时任务需求时 我是采用redis保存定时任务 的 在删除任务时间 需要比对数据库中去除的时间毫秒值 和 redis zset中的score分值 我发现数据库中数据已经删除 但是redis中set 对应的键值对仍然存在 百思不得其解 后来debug 发现毫秒值转为时间存到数据库中 再取出 时间毫秒部分竟然变成了 导致 redis中存储的 是xxxx87256 而数据库中取出时间转为毫秒值变为 XXXXX87000 所以redis 没有找到对用的键值对 

在进行时间计算或存储时,可以使用 Date 类来表示精确到毫秒的时间信息。但需要注意的是,Date 类是线程不安全的,而且在 Java 8 及更高版本中已经被弃用。推荐使用 java.time 包中的日期和时间类,如 Instant、LocalDateTime、ZonedDateTime 等,它们提供了更丰富的日期时间操作和更好的线程安全性

解决方法。

Date类换为LocalDateTime试下

LocalDateTime 类是 Java 8 引入的日期时间类,用于表示不带时区信息的日期和时间。它的精度是到纳秒级别,而不是毫秒级别。

在使用 LocalDateTime 类进行时间计算或存储时,是不会丢失毫秒部分的精度的。LocalDateTime 类的 toString() 方法默认以 ISO-8601 格式输出,包含毫秒部分,如 2023-06-22T10:15:30.123456789。

重新试了下 发现不是Java中时间类的问题 而是Mysql中dateTime只保存到秒的数据 会丢失精度 

MySQL 的 DATETIME 数据类型只能存储到秒的精度,无法保存毫秒部分的精度。因此,当使用 DATETIME 类型存储时间时,毫秒部分会被忽略,导致丢失精度。

如果需要保存毫秒精度的时间,可以考虑使用 MySQL 的 DATETIME(3) 或 TIMESTAMP(3) 数据类型。这些类型允许存储毫秒级别的精度,分别支持 3 位小数的毫秒。

破案了: Mysql 5.5不能存储微秒,此功能是在5.6.4中引入的

 完蛋 没得玩!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3