利用C#修改Windows操作系统时间
C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员。用过VC、VB等的朋友可能知道,我们可以调用Win32APISetLocalTime来改变系统时间,看来C#中也只能如此了。SetLocalTime需要一个SYSTEMTIME结构指针作为参数,这倒不难,我们可以“比葫芦画瓢”很快在C#中定义这个结构,但问题是,我同时还想“享受”.NETFramework的System.DateTime在时间转换和处理方面的便利,怎么办?只有自己动手了,为我们的C#中的SYSTEMTIME编写成员函数,实现和System.DateTime之间的互转。请看下面的代码:
首先我为了以后调用方便,新建了一个C#类库文件,在里面把SetLocalTimeAPI放到一个名称为Win32API的类中,并把这个类放到我自己定义的namespace中,避免名称冲突。以后我还可以不断向这个类和名称空间添加常用的API,以便构造我自己的C#Win32API函数库。
{
///
///
///
publicstructSYSTEMTIME
{
publicushortwYear;
publicushortwMonth;
publicushortwDayOfWeek;
publicushortwDay;
publicushortwHour;
publicushortwMinute;
publicushortwSecond;
publicushortwMilliseconds;
///
///从System.DateTime转换。
///
///System.DateTime类型的时间。
publicvoidFromDateTime(DateTimetime)
{
wYear=(ushort)time.Year;
wMonth=(ushort)time.Month;
wDayOfWeek=(ushort)time.DayOfWeek;
wDay=(ushort)time.Day;
wHour=(ushort)time.Hour;
wMinute=(ushort)time.Minute;
wSecond=(ushort)time.Second;
wMilliseconds=(ushort)time.Millisecond;
}
///
///转换为System.DateTime类型。
///
///
publicDateTimeToDateTime()
{
returnnewDateTime(wYear,wMonth,wDay,wHour,wMinute,wSecond,wMilliseconds);
}
///
///静态方法。转换为System.DateTime类型。
///
///SYSTEMTIME类型的时间。
///
publicstaticDateTimeToDateTime(SYSTEMTIMEtime)
{
returntime.ToDateTime();
}
}
publicclassWin32API
{
[DllImport("Kernel32.dll")]
publicstaticexternboolSetLocalTime(refSYSTEMTIMETime);
[DllImport("Kernel32.dll")]
publicstaticexternvoidGetLocalTime(refSYSTEMTIMETime);
}
}
然后再需要的地方通过调用如下方法中间的核心代码来实现修改Windows操作系统时间,例如,通过Button的Click事件实现修改Windows操作系统时间:
privatevoidbutton1_Click(objectsender,System.EventArgse)
{
//取得当前系统时间
DateTimet=DateTime.Now;
//在当前时间上加上一周
t=t.AddDays(7);
//转换System.DateTime到SYSTEMTIME
SYSTEMTIMEst=newSYSTEMTIME();
st.FromDateTime(t);
//调用Win32API设置系统时间
Win32API.SetLocalTime(refst);
//显示当前时间
MessageBox.Show(DateTime.Now.ToString());
}
以上就是利用C#修改Windows操作系统时间的详细内容,更多关于c#修改系统时间的资料请关注毛票票其它相关文章!