我目前正在开发一个Android应用程序..我必须记录加速度计传感器事件坐标与事件时间.我得到了传感器事件时间戳,如"3497855005850",但我无法将事件时间戳转换为用户可读的日期时间格式.提前谢谢
如何将SensorEvent时间戳转换为unix时间戳?
eha*_*ell 35
传感器时间戳实际上是纳秒的正常运行时间,而非系统时间(以纳秒为单位).请参阅SensorEvent.timestamp到绝对(utc)时间戳?.
理论上,您可以使用以下方法将传感器时间戳转换为时间(以毫秒为单位):
long timeInMillis = (new Date()).getTime()
+ (sensorEvent.timestamp - System.nanoTime()) / 1000000L;
Run Code Online (Sandbox Code Playgroud)
您甚至可以(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...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22121 次 |
| 最近记录: |