Android ScanResult时间戳字段 - 它的准确度如何?

时间:2016-03-28 14:52:45

标签: java android timestamp unix-timestamp

我一直在使用wifiManager.startScan();从附近的Wi-Fi接入点接收数据。这将作为ScanResult列表返回。这个课程可以在这里找到: http://developer.android.com/reference/android/net/wifi/ScanResult.html#timestamp

我知道ScanResult的Timestamp字段是

  

此结果为last时的以微秒为单位的时间戳(自启动以来)   可见

所以我使用一些计算来获取智能手机设备看到接入点的实际时间戳:

long actualTimestamp = System.currentTimeMillis() - SystemClock.elapsedRealtime() + (scanResult.timestamp / 1000);

这很好用,但我有一些罕见的有趣的结果:

  

15:04:01 28-03-2016 - 1459173841

     

22:50:44 07-06-2016 - 1465336244

     

15:04:21 28-03-2016 - 1459173861

请注意 2016年6月的条目,这是未来的日期,该日期与列表中收集的其他读数一致。

这里可能发生什么?我的代码有点错吗?时间戳值偶尔会不准确吗?有没有人经历过这个?

编辑:我在Nexus 5 Marshmallow设备上进行测试。 MinSDK 18,目标23

2 个答案:

答案 0 :(得分:1)

我似乎有一个解释:这是一个错误。

我偶尔会看到.timestamp(自重启后的微秒)将等于.seen(自Epoch以来的秒数)。如果重新解释为微秒时间段,现在大纪元时间大约是17天。

由于2个值显然不能相等,我将其提交给Android: https://code.google.com/p/android/issues/detail?id=225218 随意解决问题:)

答案 1 :(得分:0)

这个对我有用

long actualTime = System.currentTimeMillis() - TimeUnit.MILLISECONDS.convert(SystemClock.elapsedRealtimeNanos() - scanResult.getTimestampNanos(), TimeUnit.NANOSECONDS)