Android传感器时间戳参考时间

Android传感器时间戳参考时间,android,timestamp,sensors,Android,Timestamp,Sensors,我正在从SensorEvent数据中读取时间戳值,但我无法计算出这些值的参考时间。Android文档只是以“事件发生的纳秒时间”为例: 我当前的Android设备日期,2011年10月14日23:29:56.421(GMT+2) System.currentTimeMillis*1000000(纳秒)=1318627796431000000(没问题) sensorevent.timestamp(纳秒)=67578436328000=19小时46分钟 你能帮我吗 谢谢看来您要处理的是操作系统启动后

我正在从SensorEvent数据中读取时间戳值,但我无法计算出这些值的参考时间。Android文档只是以“事件发生的纳秒时间”为例:

我当前的Android设备日期,2011年10月14日23:29:56.421(GMT+2)

System.currentTimeMillis*1000000(纳秒)=1318627796431000000(没问题)

sensorevent.timestamp(纳秒)=67578436328000=19小时46分钟

你能帮我吗


谢谢

看来您要处理的是操作系统启动后的纳秒数,也称为“正常运行时间”

有关该问题的进一步信息:


我应该补充一点,链接的问题涉及相同的问题,也是我找到答案的地方。

我知道这是一个非常古老的问题,但我也在努力将
SensorEvent.timestamp
转换为人类可读的时间。所以我在这里写的是我到目前为止所理解的,以及我如何转换它,以便从你们那里得到更好的解决方案。欢迎提出任何意见

据我所知,
SensorEvent.timestamp
是设备启动后经过的时间。所以我必须知道设备的正常运行时间。所以,如果有一个API返回设备的启动,这将是非常容易的,但我还没有找到它。 因此,我使用
SystemClock.elapsedRealtime()
System.currentTimeMillis()
来“估计”设备的正常运行时间。这是我的密码

private long mUptimeMillis; // member variable of the activity or service
...
atComponentsStartUp...() {
    ...
    /* Call elapsedRealtime() and currentTimeMillis() in a row 
       in order to minimize the time gap */
    long elapsedRealtime = SystemClock.elapsedRealtime();
    long currentTimeMillis = System.currentTimeMillis();

    /* Get an uptime. It assume that elapsedRealtime() and
       currentTimeMillis() are called at the exact same time. 
       Actually they don't, but, ignore the gap 
       because it is not a significant value.
       (On my device, it's less than 1 ms)   */
    mUptimeMillis = (currentTimeMillis - elapsedRealtime); 
    ....
}
...
public void onSensorChanged(SensorEvent event) {
    ...
    eventTimeMillis = ((event.timestamp / 1000000) + mUptimeMillis);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(eventTimeMillis);
    ...
}

我认为这适用于毫秒级错误的应用程序。请留下您的想法。

请看这里:谢谢goto10和manu3d,最后的答案是时间戳时间是设备在nanosecs中的正常运行时间。它并不总是这样。在我的Nexus4上,从新纪元(1970年开始)到现在已经是纳秒了。也许可以通过假设SensorEvent将被快速处理并根据正常运行时间和1970年开始对其进行测试来推断。SystemClock.ElapsedRealTimeNano()是您正在寻找的API,设备的本地时间引用中的sensorTimeStamp=System.currentTimeMillis()+((event.timestamp SystemClock.ElapsedRealTimeNano())/100万毫升);你有没有发现mUptimeMillis会随着时间的推移而改变(在一只靴子里)?您在AtComponents启动时使用了哪个函数?