前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 ># 羊皮书APP(Android版)开发系列(十一)时间校准

# 羊皮书APP(Android版)开发系列(十一)时间校准

作者头像
热心的程序员
发布2018-08-30 10:38:43
3550
发布2018-08-30 10:38:43
举报
文章被收录于专栏:编程之路编程之路

APP开发人员经常会遇见一个bug就是,APP显示的时间不准,或者说APP时间与服务器时间不一致,会导致数据请求、数据显示等各种问题。这时候我们就需要一种机制来解决时间不一致的问题。

  • 解决方案如下:
  1. 服务器端永远使用UTC时间,包括参数和返回值,不要使用Date格式,而是使用UTC时间1970年1月1日的差值,即long类型的长整数。
  2. APP端将服务器返回的long型时间转换为GMT8时区的时间,额外加上8小时,这样就保证了无论使用者在哪个时区,他们看到的时间都是同一个时间,也就是GMT8的时间。
  3. APP本地时间会不准,少则差几分钟,多则十几分钟,要解决这个问题,我们可以使用HTTP Response头的Date属性,每次调用服务器接口时就取出HTTP Response头的Date值,转换为GMT时间,再减去本地取出的时间,得到一个差值d,我们将这个差值d保存下来。每次获取本地时间的时候,额外加上这个差值d,就得到了服务器的GMT8时间,就保证了任何人看见的时间都是一样的。
  4. 一个案例(Demo仅供参考):
代码语言:javascript
复制
/**
 * 获取差值
 **/
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;
    }

使用时加上差值:

代码语言:javascript
复制
 Date serverTime  = new Date(System.currentTimeMillis()+deltaBetweenServerAndClientTime);
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.03.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档