修改系统时间功能的实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值