一般我们在做商品倒计时的时候会遇到要从后台获取商品的开始时间和结束时间,还要计算商品距离开始时间的倒计时和结束时间的倒计时,但是这样只是从后台获取到开始时间,还要再和手机系统的时间相减,才能获取到开始时间的倒计时,那问题来了,如果用户在手机上改了时间呢?是不是就会产生误差,很可能其他人还没开始,就已经有人可以抢购了,这样的体验效果就很差了,所以我们不仅要计算开始时间与当前时间的时差,还要计算服务器与客户端的时差,说了这么多,还是上代码吧:
1.在项目启动的时候获取时差并保存
代码语言:javascript复制/**
* 获取时差并保存
* @param context
*/
public static void getDifferenceTime(final Context context){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(CONTENT_URL);
//生成URLConnection连接对象
URLConnection uc = url.openConnection();
//发出连接
uc.connect();
//获取服务器时间
long serverTime = uc.getDate();
//获取服务器时间与手机系统时间的时差
long differenceTime = serverTime - System.currentTimeMillis();
//保存时差
SaveUtil.getInstance(context).setDifferenceTime(differenceTime);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
2.Adapter中计算开始时间倒计时
代码语言:javascript复制//获取列表中商品的开始时间
String startTimeStr = list.get(position).getStartTime();
long startTime = stringToLong(startTimeStr);
//活动开始时间-手机时间-服务器时间与手机时间的相差值 = 活动开始倒计时
long remainingTime = startTime - System.currentTimeMillis() - SaveUtil.getInstance(mContext).getDifferenceTime();
结束时间与上述方法相同,就不再次粘代码了。我知道需要需要改进的地方还有很多,大家不要喷的太厉害了~
以上这篇Android 获取服务器与客户端时差的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考。