C#同步网络时间的方法实例详解
本文实例讲述了C#同步网络时间的方法。分享给大家供大家参考。具体分析如下:
客户的机器的系统时间经常出错,导致给他们做的软件无法正常使用,所以后来就加了一个同步网络时间的小功能。实现起来很简单,但是却很使用。
这个小功能就是先获取网络时间,然后将系统的时间修改成从网络获得的时间。下面是具体的实现:
获取网络时间:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.IO; usingSystem.Net; usingSystem.Net.Sockets; usingSystem.Text.RegularExpressions; usingSystem.Runtime.InteropServices; usingSystem.Runtime; ///<summary> ///网络时间 ///</summary> publicclassNetTime { ///<summary> ///获取标准北京时间,读取http://www.beijing-time.org/time.asp ///</summary> ///<returns>返回网络时间</returns> publicDateTimeGetBeijingTime() { DateTimedt; WebRequestwrt=null; WebResponsewrp=null; try { wrt=WebRequest.Create("http://www.beijing-time.org/time.asp"); wrp=wrt.GetResponse(); stringhtml=string.Empty; using(Streamstream=wrp.GetResponseStream()) { using(StreamReadersr=newStreamReader(stream,Encoding.UTF8)) { html=sr.ReadToEnd(); } } string[]tempArray=html.Split(';'); for(inti=0;i<tempArray.Length;i++) { tempArray[i]=tempArray[i].Replace("\r\n",""); } stringyear=tempArray[1].Split('=')[1]; stringmonth=tempArray[2].Split('=')[1]; stringday=tempArray[3].Split('=')[1]; stringhour=tempArray[5].Split('=')[1]; stringminite=tempArray[6].Split('=')[1]; stringsecond=tempArray[7].Split('=')[1]; dt=DateTime.Parse(year+"-"+month+"-"+day+""+hour+":"+minite+":"+second); } catch(WebException) { returnDateTime.Parse("2011-1-1"); } catch(Exception) { returnDateTime.Parse("2011-1-1"); } finally { if(wrp!=null) wrp.Close(); if(wrt!=null) wrt.Abort(); } returndt; } }
获取网络时间,返回一个DateTime对象,然后传给设置系统时间的方法,修改系统时间。
同步系统时间:
usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.IO; usingSystem.Net; usingSystem.Net.Sockets; usingSystem.Text.RegularExpressions; usingSystem.Runtime.InteropServices; usingSystem.Runtime; ///<summary> ///更新系统时间 ///</summary> publicclassUpdateTime { //设置系统时间的API函数 [DllImport("kernel32.dll")] privatestaticexternboolSetLocalTime(refSYSTEMTIMEtime); [StructLayout(LayoutKind.Sequential)] privatestructSYSTEMTIME { publicshortyear; publicshortmonth; publicshortdayOfWeek; publicshortday; publicshorthour; publicshortminute; publicshortsecond; publicshortmilliseconds; } ///<summary> ///设置系统时间 ///</summary> ///<paramname="dt">需要设置的时间</param> ///<returns>返回系统时间设置状态,true为成功,false为失败</returns> publicstaticboolSetDate(DateTimedt) { SYSTEMTIMEst; 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; boolrt=SetLocalTime(refst); returnrt; } }
两个方法分别写在了两个类里面,只需要在客户端实例化两个对象,然后依次调用其方法即可,简单实用。
希望本文所述对大家的C#程序设计有所帮助。