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