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#程序设计有所帮助。