android 如何将Geofence expirationTime转换为可读格式?

k3bvogb1  于 2022-12-09  发布在  Android
关注(0)|答案(1)|浏览(121)

bounty明天到期。回答此问题可获得+100声望奖励。Taifun希望吸引更多注意力此问题:如何将expirationTime转换为可读格式?今天返回的expirationTIme为134004738

我在Android中创建了一个地理围栏,如Android文档中所示。示例中的过期持续时间为10分钟,即600000毫秒。

geofenceList.add(new Geofence.Builder()
    .setRequestId("Victoria Station")
    .setCircularRegion(51.4954, -0.1443054, 500)
    .setExpirationDuration(600000)
    .setTransitionTypes(Geofence.GEOFENCE_TRANSITION_ENTER)
    .build());

公共地理围栏.BuildersetExpirationDuration(长持续时间毫秒)
设置地理围栏的过期持续时间。此地理围栏将在此时间段后自动删除。
稍后,我将检查输入的地理围栏值,如下所示

Geofence geofence = geofenceList.get(0);
Log.d(LOG_TAG, "expirationTime: " + geofence.getExpirationTime());

这将导致expirationTime为525501519
公共抽象长整型getExpirationTime()
以毫秒为单位返回地理围栏的过期时间,如果没有过期时间,则返回NEVER_EXPIRE。如果为正数,则在该时间之后将自动删除此地理围栏。
如何将expirationTime 525501519转换为可读格式?
注意:它不是Unix时间戳,类似于1669823453000 ...

64jmpszr

64jmpszr1#

您需要将long转换为可读格式。下面是一个简单直接的解决方案:

long milliseconds = geofence.getExpirationTime();

    final long seconds = TimeUnit.MILLISECONDS.toSeconds(milliseconds);
    final long minute = TimeUnit.MILLISECONDS.toMinutes(milliseconds);
    final long hours = TimeUnit.MILLISECONDS.toHours(milliseconds);
    final long days = TimeUnit.MILLISECONDS.toDays(milliseconds);

    if(milliseconds < 1000){
        Log.d(LOG_TAG, days +"d:" +hours+"h:" +minute+"m:" +seconds +"s:" +milliseconds +"ms");
    }
    else{
        Log.d(LOG_TAG, days +"d:" +hours % 24 +"h:" +minute % 60 +"m:" +seconds % 60 +"s");
    }

根据您的意见,使用以下代码将long转换为12小时时间格式(也可以根据需要更改时区):

Date date = new Date(115218964);
    DateFormat formatter = new SimpleDateFormat("hh:mm a");
    formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
    String dateFormatted = formatter.format(date);

相关问题