Mic*_*das 11 java datetime epoch java-8 java-time
在Instant
有方法:
toEpochMilli
它将此瞬间转换为1970-01-01T00:00:00Z时代的毫秒数getEpochSecond
它得到的从1970-01-01T00了Java时代的秒数:00:00Z.这两种方法都失去了精度,例如在toEpochMilli
JavaDoc中我看到:
如果此瞬间具有大于毫秒的精度,则转换将丢弃任何多余的精度信息,就好像以纳秒为单位的整数除以一百万.
我没有看到相应的方法来获得更精确的时间戳.如何从Java 8中获取epoch中的微数或纳米数?
xia*_*.li 15
使用getNano()
一起getEpochSeconds()
.
int getNano()
Run Code Online (Sandbox Code Playgroud)
获取从时间线开始的第二个开始的纳秒数.纳秒秒值测量从返回的第二个纳秒的总纳秒数
getEpochSecond
.
转换为所需的单位TimeUnit
,如评论建议:
Instant inst = Instant.now();
// Nano seconds since epoch, may overflow
long nanos = TimeUnit.SECONDS.toNanos(inst.getEpochSecond()) + inst.getNano();
// Microseconds since epoch, may overflow
long micros = TimeUnit.SECONDS.toMicros(inst.getEpochSecond()) + TimeUnit.NANOSECONDS.toMicros(inst.getNano());
Run Code Online (Sandbox Code Playgroud)
您还可以了解它们何时溢出:
// 2262-04-11T23:47:16.854775807Z
Instant.ofEpochSecond(TimeUnit.NANOSECONDS.toSeconds(Long.MAX_VALUE),
Long.MAX_VALUE % TimeUnit.SECONDS.toNanos(1));
// +294247-01-10T04:00:54.775807Z
Instant.ofEpochSecond(TimeUnit.MICROSECONDS.toSeconds(Long.MAX_VALUE),
TimeUnit.MICROSECONDS.toNanos(Long.MAX_VALUE % TimeUnit.SECONDS.toMicros(1)))
Run Code Online (Sandbox Code Playgroud)
pdx*_*eif 10
作为java.time的一部分,java.time.temporal.ChronoUnit下有一些单位,这些单位可用于获取两个时间点之间的差值,几乎是您所希望的任何单位。例如
import java.time.Instant;
import java.time.temporal.ChronoUnit;
ChronoUnit.MICROS.between(Instant.EPOCH, Instant.now())
Run Code Online (Sandbox Code Playgroud)
给出自该时间点以来的毫秒数。