Как преобразовать метку времени CellInfo в фактическую дату? - PullRequest
0 голосов
/ 04 ноября 2018

Я использую TelephonyManger.getAllCellInfo для сбора информации о соседних ячейках. Я заметил, что CellInfo содержит поле с именем mTimestamp, которое согласно документации:

Приблизительное время этой ячейки информации в нанослоях с момента загрузки

Теперь я хочу преобразовать это время в фактическую временную метку, которая даст мне конкретную дату взятия образца.

Делает ли это так: return System.currentTimeMillis() - timestampFromBootInNano / 1000000L; правильный способ преобразования?

1 Ответ

0 голосов
/ 04 ноября 2018

Нет. mTimestamp измеряется в наносекундах с момента загрузки устройства. System.currentTimeMillis() измеряется в миллисекундах с полуночи 1 января 1970 года.

Вы можете:

  • Вычтите mTimestamp из SystemClock.elapsedRealtimeNanos(), чтобы определить, сколько наносекунд назад отметка времени представляет

  • Преобразовать это в миллисекунды, чтобы определить, сколько миллисекунд назад отметка времени представляет

  • Вычтите это из System.currentTimeMillis(), чтобы определить время, когда была сделана метка времени

Итак, это дает нам:

long millisecondsSinceEvent = (SystemClock.elapsedRealtimeNanos() - timestampFromBootInNano) / 1000000L;
long timeOfEvent = System.currentTimeMillis() - millisecondsSinceEvent;

timeOfEvent теперь можно использовать с такими вещами, как java.util.Calendar, ThreeTenABP и т. Д.

...