You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将LocalDateTime转换为UUID并还原为日期时间,解决时间戳异常问题

问题根因

你生成时间UUID时传入的参数错误:ChronoField.MILLI_OF_DAY的取值是指定时间距离当天零点的毫秒数,而非从1970-01-01T00:00:00 UTC开始计算的全局Unix时间戳。

你代码中LocalDateTime.parse( "2021-10-07T21:45:14" ).getLong( ChronoField.MILLI_OF_DAY )返回值为78314000,恰好对应UTC时间1970-01-01 21:45:14的时间戳,和你解析UUID得到的错误结果完全吻合。

修复方案

需要先把无时区信息的LocalDateTime绑定对应时区,转换为全局时间戳后再传入生成UUID,示例代码如下:

// 1. 绑定你当前时间对应的时区,示例为东八区,可根据实际场景调整
ZoneId targetZone = ZoneId.of("Asia/Shanghai");
// 2. 转换得到对应全局Unix时间戳(毫秒级)
long epochMilli = LocalDateTime.parse("2021-10-07T21:45:14")
        .atZone(targetZone)
        .toInstant()
        .toEpochMilli();
// 3. 传入正确时间戳生成时间UUID
UUID timeUuid = UUIDGen.getTimeUUID(epochMilli);
注意事项
  • 不要省略时区绑定步骤:LocalDateTime本身不携带时区信息,直接转换会默认使用系统时区,可能导致跨环境生成的时间戳不一致
  • 生成后可通过UUID的timestamp()属性反向转换为Instant,和原时间做校验,确认转换正确

内容的提问来源于stack exchange,提问作者dname

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 13:39:04