您的位置:首页 > 编程语言 > C#

c#修改系统时间的方法

2013-02-22 17:14 393 查看
C#没有提供直接的方法对系统时间进行设定,一般我们只能通过DateTime.Now获取系统时间,但是并不能对这个时间进行修改。这里对了解的主要的两种方式做了个整理,希望对大家有帮助。

方法一,用API函数的方式来修改时间。

首先定义API函数

[csharp] view
plaincopy

[StructLayout( LayoutKind.Sequential)]

public struct SYSTEMTIME

{

public ushort wYear;

public ushort wMonth;

public ushort wDayOfWeek;

public ushort wDay;

public ushort wHour;

public ushort wMinute;

public ushort wSecond;

public ushort wMilliseconds;

public void FromDateTime(DateTime dateTime)

{

wYear = (ushort)dateTime.Year;

wMonth = (ushort)dateTime.Month;

wDayOfWeek = (ushort)dateTime.DayOfWeek;

wDay = (ushort)dateTime.Day;

wHour = (ushort)dateTime.Hour;

wMinute = (ushort)dateTime.Minute;

wSecond = (ushort)dateTime.Second;

wMilliseconds = (ushort)dateTime.Millisecond;

}

public DateTime ToDateTime()

{

return new DateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond);

}

}

//设定,获取系统时间,SetSystemTime()默认设置的为UTC时间,比北京时间少了8个小时。

[DllImport("Kernel32.dll")]

public static extern bool SetSystemTime(ref SYSTEMTIME time);

[DllImport("Kernel32.dll")]

public static extern bool SetLocalTime(ref SYSTEMTIME time);

[DllImport("Kernel32.dll")]

public static extern void GetSystemTime(ref SYSTEMTIME time);

[DllImport("Kernel32.dll")]

public static extern void GetLocalTime(ref SYSTEMTIME time);

调用API函数,这里主要要注意SetSystemTime和SetLocalTime,以及GetSystemTime和GetLocalTime的区别,尽量从测试结果中去分析比较。一般情况下我们就用SetLocalTime和GetLocalTime。

[csharp] view
plaincopy

{

SYSTEMTIME st = new SYSTEMTIME();

Win32.GetLocalTime(ref st);

System.Diagnostics.Debug.WriteLine("GetLocalTime()");

System.Diagnostics.Debug.WriteLine(st.ToDateTime().ToString("yyyy/MM/dd HH:mm:ss"));

Win32.GetSystemTime(ref st);

System.Diagnostics.Debug.WriteLine("GetSystemTime()");

System.Diagnostics.Debug.WriteLine(st.ToDateTime().ToString("yyyy/MM/dd HH:mm:ss"));

DateTime dt = Convert.ToDateTime("2011/12/12 12:15:20");

System.Diagnostics.Debug.WriteLine("test time:2011/12/12 12:15:20");

st.FromDateTime(dt);

Win32.SetLocalTime(ref st);

System.Diagnostics.Debug.WriteLine("SetLocalTime()");

System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));

Win32.SetSystemTime(ref st);

System.Diagnostics.Debug.WriteLine("SetSystemTime()");

System.Diagnostics.Debug.WriteLine(DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));

测试结果:

GetLocalTime()

2011/12/12 20:16:00

GetSystemTime()

2011/12/12 12:16:00 //获取的时候比北京时间少8小时

test time:2011/12/12 12:15:20

SetLocalTime()

2011/12/12 12:15:20

SetSystemTime() //设定的时候比北京时间多8小时

2011/12/12 20:15:20

方法二,cmd命令的方式

这种方式可以用Process类调用cmd,以执行Window脚本的方式来改变系统时间,这种方式对于对批处理命令比较熟的人相当实用。代码如下:

[csharp] view
plaincopy

ProcessStartInfo PstartInfoCmd = new ProcessStartInfo();

PstartInfoCmd.FileName = "cmd.exe";

PstartInfoCmd.Arguments = "/C date " + createDateTime.ToShortDateString() ;

PstartInfoCmd.WindowStyle = ProcessWindowStyle.Hidden;

Process proStep1 = new Process();

proStep1.StartInfo = PstartInfoCmd;

proStep1.Start();

主要用了一句“ date 日期”脚本命令,注意cmd的/C开关,代表的是执行完就关闭cmd窗口,否则如果调用了Process 的WaitForExit()等方法可能会阻塞。

来过就留下点脚印吧,太冷清了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: