c#修改系統時間的方法

來源:互聯網
上載者:User

C#沒有提供直接的方法對系統時間進行設定,一般我們只能通過DateTime.Now擷取系統時間,但是並不能對這個時間進行修改。這裡對瞭解的主要的兩種方式做了個整理,希望對大家有協助。

方法一,用API函數的方式來修改時間。
首先定義API函數

    [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。

       {            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指令碼的方式來改變系統時間,這種方式對於對批處理命令比較熟的人相當實用。代碼如下:

            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()等方法可能會阻塞。

 來過就留下點腳印吧,太冷清了

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.