在toEpochMilli
中有方法:
toEpochMilli
将此瞬间转换为1970-01-01T00:00:00Z getEpochSecond
获取1970-01-01T00:00:00Z 的Java纪元的秒数。这两种方法都失去了精确度,例如在{{1}} JavaDoc我看到:
如果此瞬间的精度大于毫秒,则转换 丢弃任何多余的精度信息,就像以纳秒为单位的数量一样 被整数除以一百万。
我没有看到相应的方法来获得更精确的时间戳。 如何从Java 8中获取epoch中的微数或纳米数?
答案 0 :(得分:14)
将getNano()
与getEpochSeconds()
一起使用。
int getNano()
从时间线开始,从第二个开始获取纳秒数。 纳秒秒值测量
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());
您还可以了解它们何时溢出:
// 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)))
答案 1 :(得分:4)
作为java.time的一部分,java.time.temporal.ChronoUnit下有一些单位,可用于获取两个时间点之间的差值,几乎是您所希望的任何单位。 例如
import java.time.Instant;
import java.time.temporal.ChronoUnit;
ChronoUnit.MICROS.between(Instant.EPOCH, Instant.now())
将距该时间点的时间间隔定为微秒。
答案 2 :(得分:1)
尝试使用Google Guava:Instants.toEpochMicros(即时)