博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
时间的处理--与网络时间同步
阅读量:5996 次
发布时间:2019-06-20

本文共 2496 字,大约阅读时间需要 8 分钟。

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

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

        
#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

 本文转自博客园伍华聪的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
Android4.2项目目录结构
查看>>
Map的常用方法
查看>>
DocumentBuilder setEntityResolver() Method
查看>>
NLP 自然语言处理 会议 整理
查看>>
phpcms调用一个指定的栏目的url和栏目名称
查看>>
多起点和终点求最短路
查看>>
在学校的时候写的简单的计算器软件分析
查看>>
面向对象的特性
查看>>
再谈前端HTML模板技术
查看>>
[基准测试]----lmbench
查看>>
冲刺阶段第二天
查看>>
同服务器 内的 不同数据库对象之间的对比
查看>>
任何一门语言思考的
查看>>
python——秒(s)的转换
查看>>
sharepoint 2013 添加Quickpart
查看>>
JavaScript语言核心(一)-- 原型prototype 及 原型链__proto__
查看>>
直线方程和直线系方程
查看>>
联接查询
查看>>
Python在Windows下安装第三方库浅谈
查看>>
02、alex 说过“普通运维人员就是秋后的蚂蚱”
查看>>