我知道,這是一個非常古老的問題,但是,我也掙扎轉換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);
...
}
我認爲這適用於毫秒時間錯誤爲okey的應用程序。請留下您的想法。
請參閱:http://stackoverflow.com/questions/3498006/sensorevent-timestamp-to-absolute-utc-timestamp – goto10