2017-02-10 196 views
1

如何在Android中以纳秒为单位查找自Epoch以来的时间?以纳秒为单位测量历元时间 - Android

以下API是有,但他们只给了一次开机以来

  1. SystemClock.elapsedRealtimeNanos() - 启动后的时间,但包括深层睡眠时间
  2. System.getnano() - >这是向上,因为没有深度睡眠时间启动时间。

对于时代,似乎只有1个API可用。

  • System.currentTimeMillis() - >以毫秒为单位显示自纪元以来的时间。

是否有类似的API /一种新的方法来获得自纳秒以来的时间。

PS:自从时代以来的时间意味着自1970年1月1日以来逝去的时间。

+0

Java没有提供'clock_gettime'函数,所以你选择更准确的时间是通过JNI,也会有一个开销调用JNI,所以它不会100%准确 –

+0

@Rod_Algonquin谢谢。我看到System.currentTimeMillis()也是一个本地调用。所以我猜,这对我来说可以使用JNI,但是我在android中寻找可用的APIS,可以给我纳秒。我想现在还没有可用的。 –

+0

@Rod_Algonquin我想看看currentTimeMillis()的本地实现,但无法找到源。如果你知道它在哪里,请与我分享..它会帮助我。 –

回答

0

您可以使用TimeUnit类将millis转换为nanos。尝试

long nanos = TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis()); 
+0

这只会将其转换。这不准确。我想测量的实际时间以纳秒为单位 –

0

当设备关闭时,设备没有如此准确的时钟来计算纳秒。 CPU有,但它只从开始算起。

+0

我不这么认为。您可以使用clock_gettime(CLOCK_REALTIME,&ts)从本机代码中获取nano秒。我从本地代码验证它。它工作正常。我期待从android应用程序获得类似的值,而不使用JNI /本机代码。 –

相关问题