我制作了一款基于纪元时间跨设备同步数据数据的应用。我目前通过使用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上的纪元时间戳的最佳方式?提前谢谢。
答案 0 :(得分:0)
纪元时间取决于设备的时间同步,因此两个设备可能具有不同的值。
此外,从REST端点获取时间信息似乎不是最有效的方式,因为除了常规网络延迟之外,您还会在API端点上引入潜在延迟。
由于Android设备使用各种NTP服务器来获取时间,为什么不从设备本身获取时间信息并转换为纪元?设备本身已经获得了更新的时间信息,因此您也可以使用它。
如果您想从设备本身获取当前纪元价值,可以使用[currentTimeMillis()][1]
:
System.currentTimeMillis()/1000
这将返回毫秒数,因此要获得一个以秒为单位的纪元值,只需除以1000.