Android中如何将Geofence的expirationTime转换为可读格式?
转换地理围栏expirationTime为可读格式的方法
首先明确:getExpirationTime()返回的是设备开机后的流逝实时时间(elapsed realtime),而非标准Unix时间戳。要转换成可读的日期时间,需结合设备系统启动时间计算。
具体实现步骤
获取设备启动的Unix时间戳
设备启动时间 = 当前Unix时间(毫秒) - 当前流逝实时时间(毫秒),代码实现:long bootTime = System.currentTimeMillis() - SystemClock.elapsedRealtime();计算地理围栏过期的Unix时间戳
将获取到的expirationTime与设备启动时间相加,得到标准Unix时间戳:long expirationElapsed = 525501519; // 你得到的expirationTime值 long expirationUnixTime = bootTime + expirationElapsed;转换为可读日期格式
根据Android版本选择适配的格式化方式:- 兼容Android 7及以下(使用
SimpleDateFormat):SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); String readableExpiration = sdf.format(new Date(expirationUnixTime)); - Android 8及以上(推荐使用
DateTimeFormatter):DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss") .withLocale(Locale.getDefault()); String readableExpiration = Instant.ofEpochMilli(expirationUnixTime) .atZone(ZoneId.systemDefault()) .format(formatter);
- 兼容Android 7及以下(使用
查看剩余过期时长的简便方法
如果仅需了解剩余多久过期,无需转换为日期,直接对比实时流逝时间即可:
long remainingMillis = expirationElapsed - SystemClock.elapsedRealtime(); long remainingMinutes = TimeUnit.MILLISECONDS.toMinutes(remainingMillis);
内容的提问来源于stack exchange,提问作者Taifun
相关产品推荐
相关产品推荐

