android 自动校准时间,Android客户端怎么同步校准服务器上的时间
【声明:】本文是作者(蘑菇v5)原创,版权归作者 蘑菇v5所有,侵权必究。本文首发在简书。如若转发,请注明作者和来源地址!未经授权,严禁私自转载!
在项目的开发过程中,项目要求无论终端是什么时区设置、地处何方,终端的时间是否正确,终端的时间始终要求与服务器同步,也就是说,用户买来一部新手机、新平板,不做任何日期时间、时区方面的设置,装了App就显示当前时间。
原理:
现在服务器时间 = 以前服务器时间 + 现在手机开机时间 – 以前服务器时间的获取时刻的手机开机时间
开始之前,先认识两个时间,分别是System.currentTimeMillis()和SystemClock.elapsedRealtime()。System.currentTimeMillis()获取的是系统时间,是距离1970年1月1日开始计算的一个值。获取当前日期,如当前是xxxx年xx月xx时xx分xx秒xxx毫秒,这个值在系统设置中可以更改的。
而SystemClock.elapsedRealtime()获取从设备boot后经历的时间值,是系统从启动到现在的时间(包含休眠时间),这个值在系统设置中是不可以被更改的。
思路:
使用elapsedRealtime同步服务端时间,就是说在必要的时刻获取一下服务器时间,然后记录这个时刻的手机开机时间(elapsedRealtime),两者作差,获取到设置服务器时间的时候与手机本地当前elapsedRealtime的绝对的时间差。即获取到的服务器时间- 当时手机的elapsedRealtime。 这个差值是固定的,只要请求一次服务器接口后,就可以根据本地时间推算出服务器时间,实现本地时间与服务器时间同步。
代码如下:
/**
* 获取服务器时间
* @param response
*/
public static void getServerTimeDelta(Response response){
if (response != null) {
Headers headers = response.headers();
String strServerDate = headers.get("Date");
if (!TextUtils.isEmpty(strServerDate)){
//Thu, 29 Sep 2016 07:57:42 GMT
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);
//在必要的时刻获取一下服务器时间
MyApplication.ResponseTime = serverDate.getTime();
//记录这个时刻的手机开机时间
MyApplication.ResponseCurrentTime = SystemClock.elapsedRealtime();
}catch(Exception exception){
exception.printStackTrace();
}
}
}
}
获取当前时间:
//获取当前手机时间,即远程服务器的时间
long currentTime = MyApplication.ResponseTime + SystemClock.elapsedRealtime()
-MyApplication.ResponseCurrentTime;
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
效果如下:
第一次请求到的服务器时间:
第一次请求到的服务器时间
故意手机调错后,获取的手机本地时间,和获取的同步的服务器时间format
手机调错后,获取的手机本地时间
两分钟后,效果依旧。
两分钟后,效果依旧
android 自动校准时间,Android客户端怎么同步校准服务器上的时间相关推荐
- 服务器同步电脑文件夹在哪,把文件同步到服务器上
把文件同步到服务器上 内容精选 换一换 当服务器A和服务器B同时挂载同一文件系统C时,在服务器A上传文件,服务器B同步此文件时存在延时,而单独上传至服务器B则没有延时.需要在两个服务器的挂载参数中增加 ...
- 怎么把文件同步到服务器,把文件同步到服务器上
把文件同步到服务器上 内容精选 换一换 当服务器A和服务器B同时挂载同一文件系统C时,在服务器A上传文件,服务器B同步此文件时存在延时,而单独上传至服务器B则没有延时.需要在两个服务器的挂载参数中增加 ...
- 如何使用Pycharm2019连接服务器,同时在Pycham2019中同步修改服务器上的代码
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 文章目录:如何使用Pycharm2019连接服务器,同时在Pycham2019中同步修改服务器上的代码 1 让本机的Py ...
- 关于同步VSS服务器上的代码发生Eclipse里面的项目全部不见了
有次在同步VSS服务器上的代码的时候突然发生了错误(同步的代码的项目竟然消失了)....如下图 Could not open the editor: The file does not exist. ...
- 在虚拟机上同步服务器上的时间_Hbase
局域网内Linux服务器时间同步 环境:oracle linux5.6 oracle11gR2.0.2 (active dataguard) 最近发现在几个服务器的系统时间不准了,数据库上线才4个多月 ...
- volley 调用php接口,从Android发送数组并使用Volley在PhP服务器上...
嗨,我想将字符串值数组发送到PhP服务器并进行PhP解码并将其存储在PhP变量中 这是我在android studio上的代码 private void getEventDetailRespond(R ...
- 使用rsync同步linux服务器上的文件到windows上
需求: 在windows客户端上执行计划任务同步脚本,从linux服务器上同步对应模块下的目录内容到windows客户端的D:\data目录下. 步骤: 1. rsync服务端操作略: (百度一下都有 ...
- 从授时服务器上获得时间
在一个局域网中,许多系统都要求每台计算机能够保持时间的一致性,WIN2000系统提供了与主域服务器时间同步功能,即工作站只要登录到主域服务器,工作站系统的时间自动与主域服务器时间一致,但接下来的问题是 ...
- Android 滴滴打车,打车软件客户端实现小车在地图上平滑移动的实现;基于高德地图V4.1.1+
上次写的滴滴打车软件小车平滑移动的demo,看到很多人在问我要例子: 最近有研究了下高德地图API:发现官网更新了api: Marker类新增平移.旋转.缩放等动画效果: 这样的话我们实现平滑移动就非 ...
- 【Android 系统开发】下载 编译 Android源代码 和 Android kernel源代码
下载Android源码简要流程 : a. 获取repo文件: curl http://commondatastorage.googleapis.com/git-repo-downloads/repo ...
最新文章
- 给树莓派增加微型摄像头 Raspberry Mode4
- DPDK — CLI 指令行模块
- Lazada2022新开店入驻流程及费用
- pythonanywhere使用:进入虚拟机及修改django项目的css样式
- 马尔可夫链算法原理与实现
- dijkstra算法_最短路径问题——迪杰斯特拉算法(Dijkstra)
- echarts x轴像直尺一样设置刻度_MATLAB作图实例:6:指定轴刻度值和标签
- oneproxy mysql_在OneProxy的基础上实行MySQL读写分离与负载均衡
- python学生管理系统(函数方法)_(python函数)学生管理系统
- typora绑定github博客_零基础搭建个人博客
- oracle客户端ora 12541,Oracle 11g 64bit下程序报ORA-12541: TNS: 无监听程序解决办法
- OSPF邻接关系状态机
- 小程序的全栈开发新时代
- 19. Window focus() 方法
- 专网解决方案:中兴以全光园区解决方案打造智慧园区
- 【c++实现】模拟银行叫号系统
- 09-TensorFlow 基于WDCNN的轴承故障诊断
- 工业相机和普通相机的区别详解_工业相机与普通相机的差别
- python音乐可视化效果_Python数据可视化 | 网易云音乐年度歌曲
- java技术学习交流群,诚邀您的加入