0

我正在使用 TelephonyManger.getAllCellInfo 收集有关附近小区的信息。我注意到 CellInfo 包含一个名为 的字段mTimestamp,根据文档,它是:

自启动以来此单元信息的近似时间(以纳秒为单位)

现在,我想将此时间转换为实际时间戳,这将为我提供采样的具体日期。

是这样做的:return System.currentTimeMillis() - timestampFromBootInNano / 1000000L;转换它的正确方法吗?

4

1 回答 1

1

自设备启动以来,编号mTimestamp以纳秒为单位进行测量。System.currentTimeMillis()以 1970 年 1 月 1 日午夜以来的毫秒数为单位。

你可以:

  • 减去mTimestamp,SystemClock.elapsedRealtimeNanos()以确定时间戳代表多少纳秒前

  • 将其转换为毫秒以确定时间戳表示的毫秒数

  • 从中减去System.currentTimeMillis()以确定时间戳记的时间

所以,这给了我们:

long millisecondsSinceEvent = (SystemClock.elapsedRealtimeNanos() - timestampFromBootInNano) / 1000000L;
long timeOfEvent = System.currentTimeMillis() - millisecondsSinceEvent;

timeOfEvent现在可以与诸如java.util.CalendarThreeTenABP 之类的东西一起使用。

于 2018-11-04T16:48:58.377 回答