所有设备中的android纪元时间是否相同

时间:2016-03-19 17:43:07

标签: android epoch

我制作了一款基于纪元时间跨设备同步数据数据的应用。我目前通过使用httpurlconnection在服务器上使用rest api来获取此纪元时间,如下所示:

public static String getTime(String time){
    InputStream is = null;
    BufferedReader bufferedReader = null;
    HttpURLConnection urlConnection = null;

    try{
        URL url = new URL(SERVERURL);
        urlConnection = (HttpURLConnection) url.openConnection();
        is = urlConnection.getInputStream();
        bufferedReader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
        StringBuilder stringBuilder = new StringBuilder();
        String line = null;

        while((line = bufferedReader.readLine()) != null){
            stringBuilder.append(line);
        }

        JSONObject jsonObject = new JSONObject(stringBuilder.toString());

        return jsonObject.getString("time");


    }
    catch(JSONException e){
        Log.d("getTime","json object creation failed");
    }
    catch(IOException e){
        Log.d("getTime", "couldn't get time from server");
    }
    finally {
        try {

            if(urlConnection != null){
                urlConnection.disconnect();
            }
            if(bufferedReader != null) {
                bufferedReader.close();
            }

            if(is != null){
                is.close();
            }
        }
        catch(IOException e){
            Log.d("async getGameName","io exception closing buffer");
        }
    }

    return time;
}

以便所有设备都从一个已知来源获取时间戳。此方法在后台服务中运行,因此它不会降低应用程序响应速度,但它不会产生良好的用户体验,因为我需要此时间戳来向用户显示信息,并且http请求需要很长时间。有时长达一分钟,因为这取决于网络连接,所以我想询问所有Android设备上的本地纪元时间是否相同,以及它是什么是获取Android上的纪元时间戳的最佳方式?提前谢谢。

1 个答案:

答案 0 :(得分:0)

纪元时间取决于设备的时间同步,因此两个设备可能具有不同的值。

此外,从REST端点获取时间信息似乎不是最有效的方式,因为除了常规网络延迟之外,您还会在API端点上引入潜在延迟。

由于Android设备使用各种NTP服务器来获取时间,为什么不从设备本身获取时间信息并转换为纪元?设备本身已经获得了更新的时间信息,因此您也可以使用它。

如果您想从设备本身获取当前纪元价值,可以使用[currentTimeMillis()][1]

System.currentTimeMillis()/1000

这将返回毫秒数,因此要获得一个以秒为单位的纪元值,只需除以1000.