以纳秒为单位测量纪元时间 - Android

Posted

技术标签:

【中文标题】以纳秒为单位测量纪元时间 - Android【英文标题】:Measure Epoch time in Nanoseconds - Android 【发布时间】:2017-06-28 06:55:22 【问题描述】:

如何在 android 中以纳秒为单位查找自 Epoch 以来的时间?

以下 APIS 可用,但它们只是给出启动后的时间

    SystemClock.elapsedRealtimeNanos() - 自启动以来的时间,但包括深度睡眠时间 System.getnano() -> 这是开机后的正常运行时间,没有深度睡眠时间。

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

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

是否有类似的 API/新方法可以获取自纪元以来的时间(以纳秒为单位)。

PS : Time since Epoch 表示自 1970 年 1 月 1 日 UTC 以来经过的时间。

【问题讨论】:

Java 不提供 clock_gettime 函数,因此您选择通过 JNI 获得更准确的计时,而且调用 JNI 会有开销,因此不会 100% 准确 @Rod_Algonquin 谢谢。我看到 System.currentTimeMillis() 也是本机调用。所以我想,我可以使用 JNI,但我一直在寻找 android 中可以给我纳秒级的可用 APIS。我想目前还没有可用的 APIS。 @Rod_Algonquin 我正在尝试查看 currentTimeMillis() 的本机实现,但找不到源。如果你知道它在哪里,请与我分享。它会帮助我。 您可以在本地 jdk 文件夹中检查它,文件名是os_solaris.cpp,或者您可以直接到这里:hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/… 【参考方案1】:

您可以使用 TimeUnit 类将毫秒转换为纳米。试试

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

【讨论】:

这只会转换它。这将是不准确的。我想以纳秒为单位测量实际时间【参考方案2】:

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

【讨论】:

我不这么认为。您可以使用本机代码中的 clock_gettime(CLOCK_REALTIME, &ts) 获得纳秒。我从本机代码验证了它。它工作正常。我希望在不使用 JNI/本机代码的情况下从 android 应用程序中获得类似的值..

以上是关于以纳秒为单位测量纪元时间 - Android的主要内容,如果未能解决你的问题,请参考以下文章

如何将纳秒的纪元时间转换为人类可读的?

在 Python 3.6.9 中以纳秒为单位获取 Epoch 时间戳

Windows C++ 纳秒计时?

C++ chrono 系统时间(以毫秒为单位),时间操作

是否有任何命令以纳秒为单位显示 Apple 文件系统 (APFS) 时间戳?

如何在 Python 3 中以纳秒为单位获取时间戳? [复制]