ntp协议,android获取ntp时间
2017-03-29 10:48
281 查看
NTP是网络时间协议(Network Time Protocol),它是用来同步网络中各个计算机的时间的协议。
原理:
NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。新的标准时间,是由原子钟报时的国际标准时间UTC(Universal
Time Coordinated,世界协调时)。所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
有了准确而可靠的的时间源,那这个时间如何传播呢?在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS(Global Positioning System,全球定位系统)取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。为了防止对时钟服务器的恶意破坏,NTP使用了识别机制,检查发送来的信息是否是真正来自所宣称的时钟服务器并检查信息的返回路径,以提供对抗干扰的保护机制。
下面我们用android的API来实现获取ntp时间:
原理:
NTP要提供准确的时间,就必须有准确的时间来源,那可以用格林尼治时间吗?答案是否定的。因为格林尼治时间是以地球自转为基础的时间计量系统,但是地球每天的自转是有些不规则的,而且正在缓慢加速,因此,格林尼治时间已经不再被作为标准时间使用。新的标准时间,是由原子钟报时的国际标准时间UTC(Universal
Time Coordinated,世界协调时)。所以NTP获得UTC的时间来源可以是原子钟、天文台、卫星,也可以从Internet上获取。
有了准确而可靠的的时间源,那这个时间如何传播呢?在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务器归入不同的Stratum(层)中,例如把通过GPS(Global Positioning System,全球定位系统)取得发送标准时间的服务器叫Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。
计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟服务器联系的情况下,NTP服务依然可以有效运转。为了防止对时钟服务器的恶意破坏,NTP使用了识别机制,检查发送来的信息是否是真正来自所宣称的时钟服务器并检查信息的返回路径,以提供对抗干扰的保护机制。
下面我们用android的API来实现获取ntp时间:
public static long getNtpTrustedTime(final Context context) { try { final Class<?> NtpClass = Class .forName("android.util.NtpTrustedTime"); Object obj = new Object(); Method method = NtpClass.getMethod("getInstance", Context.class); Object gi = method.invoke(obj, context); method = NtpClass.getMethod("forceRefresh"); Object receiverce = method.invoke(gi); if ((Boolean) receiverce) { method = NtpClass.getMethod("getCachedNtpTime"); Object cachedNtpTime = method.invoke(gi); return (Long) cachedNtpTime; } } catch (Exception e) { Log.d(TAG, e.getMessage()); } return -1; }
相关文章推荐
- NTP协议应用(获取网络时间)
- linux C++通过ntp协议获取网络时间
- android ntp和GPS获取网络时间问题
- linux C++通过ntp协议获取网络时间
- android/IOS NTP 获取在线的GMT 网络时间
- 使用NTP协议获取网络时间代码
- Android获取NTP网络时间
- Android4.4.2 获取NTP时间,并设置系统时间
- Android上HTTP协议通讯状态获取
- NTP协议与UNIX其它时间服务的比较
- Android Java获取当前时间的总结
- Android开发——时间获取
- android java获取当前时间的总结
- Android 的获取当前时间 的各种情况(学习)
- android获取系统时间
- android 如何获取当前时间
- android java获取当前时间的总结
- Android获取系统时间
- ntp时间获取
- Android 获取当前系统时间 时间之间的转换 判断字符串是否日日期类型