我正在使用 TelephonyManger.getAllCellInfo 收集有关附近小区的信息。我注意到 CellInfo 包含一个名为 的字段mTimestamp
,根据文档,它是:
自启动以来此单元信息的近似时间(以纳秒为单位)
现在,我想将此时间转换为实际时间戳,这将为我提供采样的具体日期。
是这样做的:return System.currentTimeMillis() - timestampFromBootInNano / 1000000L;
转换它的正确方法吗?
我正在使用 TelephonyManger.getAllCellInfo 收集有关附近小区的信息。我注意到 CellInfo 包含一个名为 的字段mTimestamp
,根据文档,它是:
自启动以来此单元信息的近似时间(以纳秒为单位)
现在,我想将此时间转换为实际时间戳,这将为我提供采样的具体日期。
是这样做的:return System.currentTimeMillis() - timestampFromBootInNano / 1000000L;
转换它的正确方法吗?
自设备启动以来,编号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.Calendar
ThreeTenABP 之类的东西一起使用。