以纳秒为单位测量纪元时间 - 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 时间戳