http://www.fanjun.me/?p=551

Android服务器时间与客户端时间的校准

由于Android的时间可以由用户调整,然后有时候时间的同步的需求,所以如何进行时间与服
务器的校准可能就是一个比较恶心的问题。

之前想到的比较简单(单位为毫秒),大概步骤如下:
1. 服务器来一个时间,约等于服务器当前时间,设置为s1
2. 拿服务器返回时的本机时间毫秒,设置为c1
3. 在本地时间c2的时候,需要获取服务器的校准时间,s1+(c2-c1)

问题

如果本地的时间在中途的时候被用户修改了,可能会导致c2比c1还小,这种情况确实比较坑爹。

但是Android还比较友好,就是如果用户修改了时间和修改了时区都会发广播,我们可以
设置一个receiver来监听几个广播,然后重新设置服务器时间。

Intent.ACTION_TIME_CHANGED
Intent.ACTION_DATE_CHANGED

但是因为这个广播就算有了,我们也不知道用户修改了多少时间,除非重新去服务器拉取服务器
时间,但是在服务器拉取失败或者在服务器拉取时间的这个请求内需要使用服务器时间的情况处
理就比较麻烦了。

其实我们弄这么多,这么复杂其实只是需要知道手机本地当前时间与设置服务器时间的时候的绝
对的时间差。

解决

具体的解决方案是系统还真有这么一个绝对时间,这个是用户改动不了的,是当用户开机之后会
保持一个时钟,那就是SystemClock.elapsedRealtime() 与 SystemClock.elapsedRealtimeNanos()

我们看看文档是如何写的:

>elapsedRealtime() and elapsedRealtimeNanos() return the time since the system was booted,
> and include deep sleep. This clock is guaranteed to be monotonic, and continues to tick
>even when the CPU is in power saving modes, so is the recommend basis for general purpose
> interval timing.

所以按照这种方式,我们在取c1与c2的时候使用这个时间就不会有问题了。

Android服务器时间校准相关推荐

  1. 网站倒计时使用服务器时间,根据服务器时间校准倒计时时间

    最近项目做一个答题活动, 需要所有用户统一时间并开始答题, 为了防止每个用户的时间不一样,所以需要从网络上获取时间,以此来校准 data() { return { countDownList: '00 ...

  2. linux 服务器时间校准,服务器时间校准

    系统时间部分: 1. 编辑时区配置文件:vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=false #把UTC设置为false关闭 ...

  3. Android 客户端与服务器端时间校准

    开发app时发现APP显示的时间不准,或者说APP时间与服务器时间不一致,会导致数据请求.数据显示等各种问题.这时候我们就需要一种机制来解决时间不一致的问题. 第一个解决方法: 服务器端永远使用UTC ...

  4. android获取服务器时间格式,Android 获取服务器与客户端时差的实例代码

    一般我们在做商品倒计时的时候会遇到要从后台获取商品的开始时间和结束时间,还要计算商品距离开始时间的倒计时和结束时间的倒计时,但是这样只是从后台获取到开始时间,还要再和手机系统的时间相减,才能获取到开始 ...

  5. windows做时间服务器,实现unix时间校准

    前言: unix系统在运行一段时间后,系统的时间就会出现偏差,由于是局域网无法连接到internet,于是将内网的可连接internet的windows主机做为时间服务器,unix通过它来校准时间 N ...

  6. 服务器自带的校时ip是多少钱,国内大概可用的NTP时间校准服务器IP地址

    一直以来同步系统时间都是一个比较烦人的问题,管理过局域网的网管应该知道,每隔一段时间你就会发现下面很多电脑的系统时间都不一样了,特别近段时间很多网吧都中了一种能自动修改系统时间的病毒,因为现在绝大部分 ...

  7. APP(Android版)客户端与服务器端时间校准

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

  8. 同步linux服务器时间

    解决服务器上时间超前的问题 [同步时间的解决方法] [公网 NTP 服务器] [确定时区配置] [确定 Linux 使用的时间方案] [本地时间修正] 转载 https://my.oschina.ne ...

  9. linux(centos)服务器时间校正

    查看服务器时间 date 安装NTP sudo yum -y install ntp 使用 ntpdate 测试 NTP ntpdate pool.ntp.org 如果报错,可以先停止服务 syste ...

最新文章

  1. 极客时间《玩转Git三剑客》之GItHub剑客
  2. 【JDBC】Eclipse连接Mysql
  3. Java Vector setElementAt()方法与示例
  4. java 秒变成时间_使用Quarkus开发Java云原生应用
  5. java中bmi的制作_Axure教程:在线BMI计算器制作
  6. 运行 iOS 模拟器中的 App 后显示空白-warning:Unsupported Configuration: Scene is unreachable due…
  7. CUDA编程:与OpenCV结合
  8. c++字符转换及介绍(未完)
  9. tomcat打印日志 linux,linux服务器修改tomcat日志输出路径方法
  10. 树莓派GPIO引脚详解
  11. DataV实现大屏滚动含后端代码
  12. “假努力”与“假关心”
  13. 2022-05-30 无法验证是否已安装所需的Microsoft更新KB2919355
  14. python库声纹_什么是声纹数据库?
  15. Linux处理cds文件,Linux 使用CDS磁盘+LVM
  16. 后台管理系统,前端框架
  17. 计算机与仪表电缆,计算机与仪表电缆
  18. mysql面试学生表_SQL笔试:Student学生表,Course 课程表,Sc选课表
  19. Google Earth Engine(GEE)——NDWI水体阈值的监测
  20. uniapp用户设置字体大小

热门文章

  1. 基于matlab的图像二维小波分解算法仿真
  2. Android开发之十四: camera(一):camera模组CMM介绍
  3. Python百度指数可视化分析实战案例1
  4. MDaemon Server Pro 7.22英文正式版
  5. 科技助力体育教育,央视总台少儿频道极速少年融媒体活动在京录制
  6. android 老人手机排行榜,2019老年手机排行榜_老年手机排行榜
  7. window.parent window.opener
  8. 全球及中国环境硫化氢监测器行业发展趋势分析与投资规划研究报告2022-2028年
  9. word目录自动生成未定义标签问题解决
  10. 【Navicate无法连接上mysql】