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

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仅供参考):
/**
 * 获取差值
 **/
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);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java架构

最全的BAT大型互联网公司面试题整理

最近有很多网友都在求大厂面试题。正好我之前电脑里面有这方面的整理,于是就发上来分享给大家。

1.5K4
来自专栏精讲JAVA

Java并发:隐藏的线程死锁

许多程序员都熟悉Java线程死锁的概念。死锁就是两个线程一直相互等待。这种情况通常是由同步或者锁的访问(读或写)不当造成的。

1133
来自专栏GIS讲堂

leaflet加载天地图

leaflet是一个轻量级的并且开源的地图框架,是由esri发起的,由于其轻量、简单而被大家喜欢,本文带你学习如何在leaflet中加载天地图。

6973
来自专栏更流畅、简洁的软件开发方式

Attribute(特性),怎么用才更好?

前几年:   2008年的某一天,我坐火车去北京。硬卧上铺,一晚上就到北京了。爬到上铺之后发现,旁边上铺有一老兄抱着一个笔记本,一开始还以为是看电影呢,仔细一...

2509
来自专栏芋道源码1024

Dubbo源码解析 —— 服务引用原理

前言 经过上一篇dubbo源码解析-简单原理、与spring融合的铺垫,我们已经能简单的实现了dubbo的服务引用.其实上一篇中的代码,很多都是从dubbo源码...

3228
来自专栏美团技术团队

Android热更新方案Robust

美团•大众点评是中国最大的O2O交易平台,目前已拥有近6亿用户,合作各类商户达432万,订单峰值突破1150万单。美团App是平台主要的入口之一,O2O交易场景...

4189
来自专栏刘望舒

热修复原理之热修复框架对比和代码修复

题外话 今天听到了著名物理学家史蒂夫霍金去世消息,潸然泪下。作为一个天文迷,感谢霍金带给我的那些天文知识。十分敬佩霍金的身残志坚,他在全身瘫痪无法言语情况下仍旧...

3394
来自专栏大数据架构师专家

python的time模块

time模块提供了一些用于管理时间和日期的C库函数,由于它绑定到底层C实现,因此一些细节会基于具体的平台。

1164
来自专栏用户2442861的专栏

2014年网易阿里腾讯 面试问题相关

http://blog.csdn.net/wendy260310/article/details/41039625

772
来自专栏Java 技术分享

Web 小案例 -- 网上书城(三)

43310

扫码关注云+社区

领取腾讯云代金券