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

简介:

时间准确的重要性不言而喻,有时候我们对时间的要求非常严格,有时候也要求不允许用户调整系统时间,有时候。。。等等情况下,我们都需要时间的同步,虽然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

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



目录
相关文章
|
11月前
|
传感器 算法
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
95 0
|
传感器 算法
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
128 0
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
|
Linux Android开发
android命令行网络时间同步
一、简介 Android基于Linux平台的开源手机操作系统。 二、原理 既然是Linux,那就应该支持linux的各种命令行,高度的可配置,但实验发现Android是Google的一个高度阉割版的linux,很多命令都不支持,如rdate命令(网络同步时间命令)。
1605 0
|
定位技术
【网络游戏专题】时间同步装置
在网络游戏中,有一个最基本的需求是,如果让一个玩家的动作(比如行走)即时地、流畅地在其它的游戏地理位置相邻的玩家的屏幕上显现,如果是在局域网内,这个不是什么大不了的问题,但是如果游戏玩家是分散在Internet上的用户,由于网络的延时的影响,使得其成为项颇有难度的任务。
1069 0
|
1月前
|
机器学习/深度学习 数据采集 人工智能
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
m基于深度学习网络的手势识别系统matlab仿真,包含GUI界面
41 0
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
基于yolov2深度学习网络的火焰烟雾检测系统matlab仿真
|
1月前
|
机器学习/深度学习 算法 计算机视觉
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
m基于深度学习网络的性别识别系统matlab仿真,带GUI界面
29 2
|
1月前
|
机器学习/深度学习 算法 计算机视觉
基于yolov2深度学习网络的视频手部检测算法matlab仿真
基于yolov2深度学习网络的视频手部检测算法matlab仿真

热门文章

最新文章