#独家
为什么LocalDateTime生成整点的时间戳结尾会多个1?

2023-04-16 0 3,107

具体的代码我就不全贴了,主要就是生成时间戳

//在方法外面定义了一个DateTimeFormatter 
static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMddHH");
//在一个定时任务内部会去读文件名中的时间,time就是时间,跟DateTimeFormatter的格式是匹配的
long ts = LocalDateTime.parse(time, df).toInstant(ZoneOffset.of("+8")).toEpochMilli();

结果生成的时间戳入库后最后面有的跟个1,有的跟个2是为什么呀?

判断是因为时间精度的问题导致生成的时间戳后面跟了1或2。
使用了LocalDateTime.parse方法将时间字符串time解析成了LocalDateTime类型,然后调用toInstant方法将其转换成Instant类型,并指定了时间偏移量为+8,最后调用toEpochMilli方法获取时间戳。这种方式生成时间戳的精度是毫秒级别的,而由于时间戳的生成是根据当前系统时间而来,所以存在微小的时间差异,即可能存在千分之一毫秒以下的时间差异,从而导致最后生成的时间戳末尾有1或2的情况。

为了避免这种情况的出现,可以将时间精度提高到微秒级别,即将DateTimeFormatter中的格式改为”yyMMddHHmmssSSS”,并将toEpochMilli方法改为toEpochSecond方法,并且结果乘以1000来得到秒级别的时间戳。这样生成的时间戳的精度将提高到微秒级别,可以有效避免生成时间戳末尾带有1或2的情况。

具体修改方法如下:

static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
long ts = LocalDateTime.parse(time, df).toInstant(ZoneOffset.of("+8")).getEpochSecond() * 100
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

1. 有软官网所有资源来源于开发团队,加入会员即可下载使用!如有问题请联系右下角在线客服!
2. 有软官方保障所有软件都通过人工亲测,为每位会员用户提供安全可靠的应用软件、游戏资源下载及程序开发服务。
3. 有软团队针对会员诉求,历经多年拥有现今开发成果, 每款应用程序上线前都经过人工测试无误后提供安装使用,只为会员提供安全原创的应用。
4. PC/移动端应用下载后如遇安装使用问题请联系右下角在线客服或提交工单,一对一指导解决疑难。

有软官网_用软件,找有软 技术分享 为什么LocalDateTime生成整点的时间戳结尾会多个1? https://www.jiaruvip.com/1547.html

有软应用商店是经过官方安全认证,保障正版软件平台

相关资源

官方客服团队

为您解决烦忧 - 24小时在线 专业服务