LocalDateTime生成时间戳末尾多1或2是怎么回事?

localdatetime 生成整点时间戳末尾多 1 的原因

使用 localdatetime.parse 方法解析时间字符串并在转换为时间

戳时,可能会出现时间戳末尾带有 1 或 2 的情况。这是由于时间精度问题导致的。

解决方案

要解决此问题,可以将时间精度提高到微秒级别。具体修改如下:

  • 将 datetimeformatter 的格式改为 "yymmddhhmmsssss"
  • 将 toepochmilli 方法改为 toepochsecond
  • 将结果乘以 1000 以获得秒级别的时间戳

修改后的代码如下:

static DateTimeFormatter df = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
long ts = LocalDateTime.parse(time, df).toInstant(ZoneOffset.of("+8")).getEpochSecond() * 1000;

通过提高时间精度,可以避免生成带有末尾 1 或 2 的时间戳。