C#同步网络时间的方法实例详解
程序员文章站
2022-04-11 07:50:11
本文实例讲述了c#同步网络时间的方法。分享给大家供大家参考。具体分析如下:
客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的...
本文实例讲述了c#同步网络时间的方法。分享给大家供大家参考。具体分析如下:
客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的小功能。实现起来很简单,但是却很使用。
这个小功能就是先获取网络时间,然后将系统的时间修改成从网络获得的时间。下面是具体的实现:
获取网络时间:
using system; using system.collections.generic; using system.linq; using system.text; using system.io; using system.net; using system.net.sockets; using system.text.regularexpressions; using system.runtime.interopservices; using system.runtime; /// <summary> /// 网络时间 /// </summary> public class nettime { /// <summary> /// 获取标准北京时间,读取http://www.beijing-time.org/time.asp /// </summary> /// <returns>返回网络时间</returns> public datetime getbeijingtime() { datetime dt; webrequest wrt = null; webresponse wrp = null; try { wrt = webrequest.create("http://www.beijing-time.org/time.asp"); wrp = wrt.getresponse(); string html = string.empty; using (stream stream = wrp.getresponsestream()) { using (streamreader sr = new streamreader(stream,encoding.utf8)) { html = sr.readtoend(); } } string[] temparray = html.split(';'); for (int i = 0; i < temparray.length; i++) { temparray[i] = temparray[i].replace("\r\n", ""); } string year = temparray[1].split('=')[1]; string month = temparray[2].split('=')[1]; string day = temparray[3].split('=')[1]; string hour = temparray[5].split('=')[1]; string minite = temparray[6].split('=')[1]; string second = temparray[7].split('=')[1]; dt = datetime.parse(year + "-" + month + "-" + day + " " + hour + ":" + minite + ":" + second); } catch (webexception) { return datetime.parse("2011-1-1"); } catch (exception) { return datetime.parse("2011-1-1"); } finally { if (wrp != null) wrp.close(); if (wrt != null) wrt.abort(); } return dt; } }
获取网络时间,返回一个datetime对象,然后传给设置系统时间的方法,修改系统时间。
同步系统时间:
using system; using system.collections.generic; using system.linq; using system.text; using system.io; using system.net; using system.net.sockets; using system.text.regularexpressions; using system.runtime.interopservices; using system.runtime; /// <summary> /// 更新系统时间 /// </summary> public class updatetime { //设置系统时间的api函数 [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">需要设置的时间</param> /// <returns>返回系统时间设置状态,true为成功,false为失败</returns> public static bool setdate(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; bool rt = setlocaltime(ref st); return rt; } }
两个方法分别写在了两个类里面,只需要在客户端实例化两个对象,然后依次调用其方法即可,简单实用。
希望本文所述对大家的c#程序设计有所帮助。
上一篇: C#使用IHttpModule接口修改http输出的方法
下一篇: C#对文件/文件夹操作代码汇总