Date时间类丢失毫秒精度

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

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

解决方法。

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中引入的

 完蛋 没得玩!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值