Измерение времени эпохи в наносекундах — Android

Как найти время с эпохи в наносекундах в Android?

Ниже доступны APIS, но они просто показывают время с момента загрузки.

  1. SystemClock.elapsedRealtimeNanos() — время с момента загрузки, но включает время глубокого сна
  2. System.getnano() -> Это время безотказной работы с момента загрузки без глубокого сна.

Для времени Эпохи, кажется, доступен только 1 API.

  • System.currentTimeMillis() -> показывает время с начала эпохи в миллисекундах.

Есть ли аналогичный API/новый подход для получения времени с эпохи в наносекундах.

PS: время с начала эпохи означает время, прошедшее с 1 января 1970 года по всемирному координированному времени.


person mk..    schedule 10.02.2017    source источник
comment
Java не предлагает функцию clock_gettime, поэтому вы можете выбрать более точное время через JNI, также будут накладные расходы на вызов JNI, поэтому он не будет точным на 100%.   -  person Rod_Algonquin    schedule 10.02.2017
comment
@Rod_Algonquin Спасибо. Я вижу, что System.currentTimeMillis() также является родным вызовом. Так что я думаю, что для меня будет нормально использовать JNI, но я искал доступный APIS в Android, который может дать мне наносекунды. Я думаю, что на данный момент их нет.   -  person mk..    schedule 10.02.2017
comment
@Rod_Algonquin Я пытаюсь посмотреть на нативную реализацию currentTimeMillis(), но не могу найти источник. Если вы знаете, где это, пожалуйста, поделитесь со мной. Это поможет мне.   -  person mk..    schedule 10.02.2017
comment
Вы можете либо проверить это в своей локальной папке jdk, имя файла os_solaris.cpp, либо просто перейти сюда: hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/   -  person Rod_Algonquin    schedule 10.02.2017


Ответы (2)


Вы можете преобразовать миллисекунды в нано с помощью класса TimeUnit. Пытаться

long nanos = TimeUnit.MILLISECONDS.toNanos(System.currentTimeMillis());
person Jesse Buss    schedule 10.02.2017
comment
Это просто преобразовало бы его. Это было бы неточно. Я хотел бы измерить фактическое время в наосекундах - person mk..; 10.02.2017

Устройство не имеет настолько точных часов, чтобы считать наносекунды, когда устройство выключено. CPU делает, но считает только с самого начала.

person DmitryBorodin    schedule 10.02.2017
comment
Я так не думаю. Вы можете получить наносекунды, используя clock_gettime(CLOCK_REALTIME, &ts) из собственного кода. Я проверил это из собственного кода. Это работает нормально. Я хочу получить аналогичное значение из приложения для Android без использования JNI/собственного кода. - person mk..; 10.02.2017