Accelerometer SensorEvent временная метка

Im в настоящее время работает над приложением android .. Мне нужно зарегистрировать координату события датчика акселерометра с временем события. Я получил отметку времени события датчика как «3497855005850», но я не могу преобразовать временную метку события в формат времени, пригодный для чтения. Спасибо заранее

Как я могу преобразовать временную метку SensorEvent в timestamp unix?

Временная метка датчика – фактически наносекунды времени безотказной работы, а не системное время в наносекундах. См. SensorEvent.timestamp для абсолютной отметки времени (utc)? ,

Теоретически вы можете преобразовать временную метку датчика во времени в миллисекундах, используя:

long timeInMillis = (new Date()).getTime() + (sensorEvent.timestamp - System.nanoTime()) / 1000000L; 

Вы можете даже (new Date()).getTime() вызов (new Date()).getTime() с двумя вызовами System.nanoTime() и усреднить их, чтобы приблизиться к фактическому смещению.

Затем вы можете отформатировать время датчика как дату и время.

Вы можете установить переменные времени референта в своей функции onSensorChanged(SensorEvent) .

Ссылка на текущее время и время события. Когда событие прибывает, вычитайте время референта от времени события, и у вас будет разница в наносекундах. Вы можете добавить, что разница делится на 1 000 000 на текущую ссылку времени, чтобы получить время события в миллисекундах.
Ошибка при вычислении может быть не более 0,5 миллисекунды для одного события. Вы можете свести к минимуму ошибку, иногда изменяя время референта.

 private long sensorTimeReference = 0l; private long myTimeReference = 0l; public void onSensorChanged(SensorEvent event) { // set reference times if(sensorTimeReference == 0l && myTimeReference == 0l) { sensorTimeReference = event.timestamp; myTimeReference = System.currentTimeMillis(); } // set event timestamp to current time in milliseconds event.timestamp = myTimeReference + Math.round((event.timestamp - sensorTimeReference) / 1000000.0); // some code... } 

У меня была та же проблема, и я использовал решение Эхартвелла. Однако я использовал System.currentTimeMillis() вместо new Date().getTime() .

Кроме того, я обнаружил, что есть смещение sensorEvent.timeStamp и System.nanoTime() максимально 300 мс, в основном <200 мс. В зависимости от необходимой точности вы можете игнорировать эту разницу.

Если я использую решение Бобана С., то при инициализации разница будет верна. Однако правильное время и время измерений расходятся. Расчетное время измерений будет в будущем.