时间的处理--与网络时间同步

简介:

时间准确的重要性不言而喻,有时候我们对时间的要求非常严格,有时候也要求不允许用户调整系统时间,有时候。。。等等情况下,我们都需要时间的同步,虽然Windows也有DOS命令来保持和时钟服务进行同步,但本文另辟途径,介绍另一种获取标准时间并同步时间的操作。

首先,我们来看看一个网站:国家授时中心(http://www.time.ac.cn/stime.asp),这个是应该是时间的权威机构,里面有各国各地的时间,我们可以通过同步该时间来实现系统时间的更新。首先分两步,一步是获取“国家授时中心”的时间,一步是更新系统时间。下面的代码就是做这些工作。

         #region  获取网络时间
        
///   <summary>
        
///  获取中国国家授时中心网络服务器时间发布的当前时间
        
///   </summary>
        
///   <returns></returns>
         public   static  DateTime GetChineseDateTime()
        {
            DateTime res 
=  DateTime.MinValue;
            
try
            {
                
string  url  =   " http://www.time.ac.cn/stime.asp " ;
                HttpHelper helper 
=   new  HttpHelper();
                helper.Encoding 
=  Encoding.Default;
                
string  html  =  helper.GetHtml(url);
                
string  patDt  =   @" \d{4}年\d{1,2}月\d{1,2}日 " ;
                
string  patHr  =   @" hrs\s+=\s+\d{1,2} " ;
                
string  patMn  =   @" min\s+=\s+\d{1,2} " ;
                
string  patSc  =   @" sec\s+=\s+\d{1,2} " ;
                Regex regDt 
=   new  Regex(patDt);
                Regex regHr 
=   new  Regex(patHr);
                Regex regMn 
=   new  Regex(patMn);
                Regex regSc 
=   new  Regex(patSc);

                res 
=  DateTime.Parse(regDt.Match(html).Value);
                
int  hr  =  GetInt(regHr.Match(html).Value,  false );
                
int  mn  =  GetInt(regMn.Match(html).Value,  false );
                
int  sc  =  GetInt(regSc.Match(html).Value,  false );
                res 
=  res.AddHours(hr).AddMinutes(mn).AddSeconds(sc);
            }
            
catch  { }
            
return  res;
        }

        
///   <summary>
        
///  从指定的字符串中获取整数
        
///   </summary>
        
///   <param name="origin"> 原始的字符串 </param>
        
///   <param name="fullMatch"> 是否完全匹配,若为false,则返回字符串中的第一个整数数字 </param>
        
///   <returns> 整数数字 </returns>
         private   static   int  GetInt( string  origin,  bool  fullMatch)
        {
            
if  ( string .IsNullOrEmpty(origin))
            {
                
return   0 ;
            }
            origin 
=  origin.Trim();
            
if  ( ! fullMatch)
            {
                
string  pat  =   @" -?\d+ " ;
                Regex reg 
=   new  Regex(pat);
                origin 
=  reg.Match(origin.Trim()).Value;
            }
            
int  res  =   0 ;
            
int .TryParse(origin,  out  res);
            
return  res;
        }
        
#endregion
         #region  P/Invoke 设置本地时间

        [DllImport(
" kernel32.dll " )]
        
private   static   extern   bool  SetLocalTime( ref  SYSTEMTIME time);

        [StructLayout(LayoutKind.Sequential)]
        
private   struct  SYSTEMTIME
        {
            
public   short  year;
            
public   short  month;
            
public   short  dayOfWeek;
            
public   short  day;
            
public   short  hour;
            
public   short  minute;
            
public   short  second;
            
public   short  milliseconds;
        }

        
///   <summary>
        
///  设置本地计算机时间
        
///   </summary>
        
///   <param name="dt"> DateTime对象 </param>
         public   static   void  SetLocalTime(DateTime dt)
        {
            SYSTEMTIME st;

            st.year 
=  ( short )dt.Year;
            st.month 
=  ( short )dt.Month;
            st.dayOfWeek 
=  ( short )dt.DayOfWeek;
            st.day 
=  ( short )dt.Day;
            st.hour 
=  ( short )dt.Hour;
            st.minute 
=  ( short )dt.Minute;
            st.second 
=  ( short )dt.Second;
            st.milliseconds 
=  ( short )dt.Millisecond;

            SetLocalTime(
ref  st);
        }

        
#endregion

 本文转自博客园伍华聪的博客,原文链接:时间的处理--与网络时间同步,如需转载请自行联系原博主。



目录
相关文章
|
6月前
|
算法 网络协议 数据安全/隐私保护
NTP网络时间同步协议详解
NTP协议是互联网上用于同步计算机时间的标准,它利用分布式时间服务器网络,通过分层管理和本地路由算法确保时间的准确性。协议涉及时间偏差、延迟和差量三个概念,用于测量与参考时钟的同步状态。基本NTP数据包包含48字节,如头部和时间戳,关键字段如跳跃指示器(LI)、版本号(VN)、模式(Mode)、层次(Stratum)等影响同步过程。协议还包括时间戳以记录不同阶段的时间点。NTP认证可选,用于数据安全。
NTP网络时间同步协议详解
|
传感器 算法
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
172 0
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
|
传感器 算法
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
126 0
|
Linux Android开发
android命令行网络时间同步
一、简介 Android基于Linux平台的开源手机操作系统。 二、原理 既然是Linux,那就应该支持linux的各种命令行,高度的可配置,但实验发现Android是Google的一个高度阉割版的linux,很多命令都不支持,如rdate命令(网络同步时间命令)。
1670 0
|
定位技术
【网络游戏专题】时间同步装置
在网络游戏中,有一个最基本的需求是,如果让一个玩家的动作(比如行走)即时地、流畅地在其它的游戏地理位置相邻的玩家的屏幕上显现,如果是在局域网内,这个不是什么大不了的问题,但是如果游戏玩家是分散在Internet上的用户,由于网络的延时的影响,使得其成为项颇有难度的任务。
1105 0
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
3天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。
|
2天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务、网络安全和信息安全的交汇点
在数字化时代,云计算已成为企业和个人存储、处理数据的关键技术。然而,随着云服务的普及,网络安全问题也日益凸显。本文将深入探讨云计算与网络安全的关系,分析云服务中的安全挑战,并提出相应的解决方案。同时,我们还将介绍一些实用的代码示例,帮助读者更好地理解和应对网络安全问题。
下一篇
无影云桌面