1. 首页 > 电脑教程 > 与网络时间同步的时间处理函数代码

与网络时间同步的时间处理函数代码

时间准确的重要性不言而喻,有时候我们对时间的要求非常严格,有时候也要求不允许用户调整系统时间,有时候。。。等等情况下,我们都需要时间的同步,虽然Windows也有DOS命令来保持和时钟服务进行同步,但本文另辟途径,介绍另一种获取标准时间并同步时间的操作。首先,我们来看看一个网站:国家授时中心(http://www.time.ac.cn/stime.asp),这个是应该是时间的权威机构,里面有各国各地的时间,我们可以通过同步该时间来实现系统时间的更新。首先分两步,一步是获取“国家授时中心”的时间,一步是更新系统时间。下面的代码就是做这些工作。#region 获取网络时间/// /// 获取中国国家授时中心网络服务器时间发布的当前时间/// /// 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;}/// /// 从指定的字符串中获取整数/// /// 原始的字符串/// 是否完全匹配,若为false,则返回字符串中的第一个整数数字/// 整数数字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;}/// /// 设置本地计算机时间/// /// DateTime对象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两步操作就可以搞定时间的同步,测试效果还是不错,不过不建议频繁进行时间的同步处理,间隔一段时间检查一次即可。如果你有更好的方法,希望大家交流提高。

声明:希维路由器教程网提供的内容,仅供网友学习交流,如有侵权请与我们联系删除,谢谢。ihuangque@qq.com
本文地址:https://www.ctrlcv.com.cn/diannao/169347604810737.html