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

简介:

时间准确的重要性不言而喻,有时候我们对时间的要求非常严格,有时候也要求不允许用户调整系统时间,有时候。。。等等情况下,我们都需要时间的同步,虽然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仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
169 0
m无线传感器网络WSN的时间同步捕获算法matlab仿真,对比单步捕获法,双步捕获法以及锯齿波匹配捕获法
|
传感器 算法
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
m基于马尔科夫随机场和Gardner环的WSN网络时间同步matlab仿真
123 0
|
Linux Android开发
android命令行网络时间同步
一、简介 Android基于Linux平台的开源手机操作系统。 二、原理 既然是Linux,那就应该支持linux的各种命令行,高度的可配置,但实验发现Android是Google的一个高度阉割版的linux,很多命令都不支持,如rdate命令(网络同步时间命令)。
1662 0
|
定位技术
【网络游戏专题】时间同步装置
在网络游戏中,有一个最基本的需求是,如果让一个玩家的动作(比如行走)即时地、流畅地在其它的游戏地理位置相邻的玩家的屏幕上显现,如果是在局域网内,这个不是什么大不了的问题,但是如果游戏玩家是分散在Internet上的用户,由于网络的延时的影响,使得其成为项颇有难度的任务。
1101 0
|
3天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第23天】在数字时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将探讨网络安全漏洞、加密技术和安全意识等方面的内容,以帮助读者更好地了解如何保护自己的网络安全。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,我们将为读者提供一些实用的建议和技巧,以增强他们的网络安全防护能力。
|
1天前
|
SQL 存储 安全
网络安全与信息安全:防范漏洞、加密技术及安全意识
随着互联网的快速发展,网络安全和信息安全问题日益凸显。本文将探讨网络安全漏洞的类型及其影响、加密技术的应用以及提高个人和组织的安全意识的重要性。通过深入了解这些关键要素,我们可以更好地保护自己的数字资产免受网络攻击的威胁。
|
1天前
|
SQL 安全 算法
网络安全与信息安全:漏洞、加密和意识的三维防护网
【10月更文挑战第25天】在数字时代的浪潮中,网络安全和信息安全如同守护我们虚拟家园的坚固城墙。本文将深入探讨网络安全漏洞的种类与应对策略,解析加密技术的核心原理及其应用,并强调提升个人与企业的安全意识对于构建安全防线的重要性。通过深入浅出的方式,我们将一起探索网络世界的安全之道,确保数据资产的坚不可摧。