当前位置: 首页 > 知识库问答 >
问题:

如何在java 8中将微秒转换为LocalDateTime[重复]

顾均
2023-03-14

我可以像这样将19位unix时间戳转换为LocalDateTime

Instant instant =
                    Instant.ofEpochSecond(
                            TimeUnit.NANOSECONDS.toSeconds(timestamp),
                            (timestamp % 1_000_000_000L));
            return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

共有1个答案

柯乐童
2023-03-14

您可以使用instant.Ofepochmilli从时间戳中以毫秒获得时间,然后使用instant#plusnanos添加微秒。

它看起来是这样的:

Instant instant = Instant.ofEpochMillis(timestamp/1_000).plusNanos(timestamp%1_000);
return LocalDateTime.ofInstant(instant, ZoneId.systemDefault());

timestamp/1_000获取以毫秒为单位的时间,截断微秒,plusnanos(时间戳%1_000)添加微秒部分并返回一个新的instant

ZonedDateTime zonedTimestamp=yourLocalDateTime.atZone(ZoneId.systemDefault());
Instant convertedInstant=zonedTimestamp.toInstant();
long recreatedTimeMicros=convertedInstant.toEpochMillis()*1_000+(convertedInstant.getNano()/1_000)%1_000;

这将LocalDateTime转换为具有默认时区的ZonedDateTime(您在另一个方向上使用),并获取纪元毫秒,然后将纳秒添加到它。

注意,getnanos()获取上一秒以来的纳秒数。毫秒需要乘以1000,以微秒为单位,纳秒要除以1000,原因相同。此外,还需要模运算,这样就不会多次计算毫秒数。

 类似资料: