羊皮书APP(Android版)开发系列(十一)客户端与服务器端时间校准
来源:互联网 发布:水果编曲软件 编辑:程序博客网 时间:2024/05/01 10:38
APP开发人员经常会遇见一个bug就是,APP显示的时间不准,或者说APP时间与服务器时间不一致,会导致数据请求、数据显示等各种问题。这时候我们就需要一种机制来解决时间不一致的问题。
- 解决方案如下:
- 服务器端永远使用UTC时间,包括参数和返回值,不要使用Date格式,而是使用UTC时间1970年1月1日的差值,即long类型的长整数。
- APP端将服务器返回的long型时间转换为GMT8时区的时间,额外加上8小时,这样就保证了无论使用者在哪个时区,他们看到的时间都是同一个时间,也就是GMT8的时间。
- APP本地时间会不准,少则差几分钟,多则十几分钟,要解决这个问题,我们可以使用HTTP Response头的Date属性,每次调用服务器接口时就取出HTTP Response头的Date值,转换为GMT时间,再减去本地取出的时间,得到一个差值d,我们将这个差值d保存下来。每次获取本地时间的时候,额外加上这个差值d,就得到了服务器的GMT8时间,就保证了任何人看见的时间都是一样的。
- 一个案例:
/** * 获取差值 **/private long getDeltaBetweenServerAndClientTime(Headers headers) { long deltaBetweenServerAndClientTime=0; if (headers!=null) { final String strServerDate = headers.get("Date"); if (!TextUtils.isEmpty(strServerDate)){ final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss z", Locale.ENGLISH); TimeZone.setDefault(TimeZone.getTimeZone("GMT+8")); try { Date serverDate = simpleDateFormat.parse(strServerDate); deltaBetweenServerAndClientTime = serverDate.getTime()-System.currentTimeMillis(); } catch (ParseException e) { e.printStackTrace(); } } } return deltaBetweenServerAndClientTime; }
使用时加上差值:
Date serverTime = new Date(System.currentTimeMillis()+deltaBetweenServerAndClientTime);
- 原文地址:http://blog.csdn.net/wjwj1203/article/details/50902113
- 我的github地址:https://github.com/wjie2014
- 我的博客地址:http://blog.studyou.cn/
- 我的CSDN博客地址:http://blog.csdn.net/wjwj1203
- 我的Gmail邮箱:w489657152@gmail.com
0 0
- 羊皮书APP(Android版)开发系列(十一)客户端与服务器端时间校准
- Android 客户端与服务器端时间校准
- 羊皮书APP(Android版)开发系列(三)APP引导页启动控制
- 羊皮书APP(Android版)开发系列(五)APP引导页实现
- 羊皮书APP(Android版)开发系列(十)Android开发常用工具类
- 羊皮书APP(Android版)开发系列(七)Android沉浸通知栏
- 羊皮书APP(Android版)开发系列(十二)Android Socket UDP大文件传输
- 羊皮书APP(Android版)开发系列(十三)Android 邮件发送的实现
- 羊皮书APP(Android版)开发系列(一)Icon图片生成神器
- 羊皮书APP (Android版)开发系列(二)日志工具类
- 羊皮书APP(Android版)开发系列(四)全屏幕延迟启动
- 羊皮书APP(Android版)开发系列(六)几个工具的选取
- 羊皮书APP(Android版)开发系列(八)用户登录
- 羊皮书APP(Android版)开发系列(九)通过Wifi调试程序
- APP | 02- 企业级Android客户端(APP)与服务器端(JavaEE)整合的架构
- 客户端与服务器端时间保持一致
- C#服务器端与客户端通信(客户端)
- Android手机app与服务器端进行通信(一)
- UESTC 250 windy数
- RMQ算法求区间最值
- Genymotion不同机器间如何沿用
- Android聊天软件界面开发
- LeetCode: 1. Two Sum【C 解题】
- 羊皮书APP(Android版)开发系列(十一)客户端与服务器端时间校准
- 12个免费web后台模板
- Java 泛型
- Segment-段(SAP)
- 简单带缩略图轮播
- Android时间轴的实现
- Java获取来访者IP
- Magento2 常用代码
- c++友元函数