修改系统时间功能的实现

来源:互联网 发布:游戏配音软件 编辑:程序博客网 时间:2024/05/06 11:11

using System.Runtime.InteropServices; //System.Runtime.InteropServices一般用到其中的DllImport,它用来调用windows中一些DLL的函数(Windows API),或调用自己用c++写的DLL中的函数.

 

#region   ComputerTime
        [StructLayout(LayoutKind.Sequential)]
        public struct SystemTime
        {
            public ushort wYear;//ushort 为无符号16位整数
            public ushort wMonth;
            public ushort wDayOfWeek;
            public ushort wDay;
            public ushort wHour;
            public ushort wMinute;
            public ushort wSecond;
            public ushort wMiliseconds;
        }
        public class Win32
        {
            [DllImport("Kernel32.dll ")]//参看:http://hi.baidu.com/ja86/blog/item/011c6522455f88fad7cae2ce.html
            public static extern bool SetSystemTime(ref   SystemTime SysTime);//SetSystemTime设置格林威治时间,比北京时间晚8小时,需要调整wHour。

            [DllImport("Kernel32.dll ")]
            public static extern void GetSystemTime(ref   SystemTime SysTime);
        }


        #endregion

        #region   时间同步
        ///   <summary>
        ///   设置与服务器同步时间  
        ///   </summary>
        public void SynchronousTime(string strdt)
        {
            try
            {
                #region   更改计算机时间

                SystemTime sysTime = new SystemTime();

                DateTime ServerTime = Convert.ToDateTime(strdt);

                sysTime.wYear = Convert.ToUInt16(ServerTime.Year);

                sysTime.wMonth = Convert.ToUInt16(ServerTime.Month);

                //处置北京时间  

                int nBeijingHour = ServerTime.Hour - 8;

                if (nBeijingHour <= 0)
                {
                    nBeijingHour += 24;

                    sysTime.wDay = Convert.ToUInt16(ServerTime.Day - 1);

                    sysTime.wDayOfWeek = Convert.ToUInt16(ServerTime.DayOfWeek - 1);
                }
                else
                {
                    sysTime.wDay = Convert.ToUInt16(ServerTime.Day);

                    sysTime.wDayOfWeek = Convert.ToUInt16(ServerTime.DayOfWeek);
                }

                sysTime.wHour = Convert.ToUInt16(nBeijingHour);

                sysTime.wMinute = Convert.ToUInt16(ServerTime.Minute);

                sysTime.wSecond = Convert.ToUInt16(ServerTime.Second);

                sysTime.wMiliseconds = Convert.ToUInt16(ServerTime.Millisecond);

                Win32.SetSystemTime(ref   sysTime);

                #endregion
            }
            catch
            {
                //产生错误则不引发异常。
            }
        }
        #endregion

原创粉丝点击