C# 更新系统时间

方法

        #region 更改系统时间
        // 针对于旧Windows系统,如Windows XP,win2003,win2008
        [DllImport("Kernel32.dll")]
        public static extern bool SetSystemTime(ref SystemTime sysTime);
        [DllImport("Kernel32.dll")]
        public static extern void GetSystemTime(ref SystemTime sysTime);
        [DllImport("Kernel32.dll")]
        public static extern bool SetLocalTime(ref SystemTime sysTime);
        [DllImport("Kernel32.dll")]
        public static extern void GetLocalTime(ref SystemTime sysTime);
        [StructLayout(LayoutKind.Sequential)]
        public struct SystemTime
        {
            [MarshalAs(UnmanagedType.U2)]
            internal ushort year; // 年
            [MarshalAs(UnmanagedType.U2)]
            internal ushort month; // 月
            [MarshalAs(UnmanagedType.U2)]
            internal ushort dayOfWeek; // 星期
            [MarshalAs(UnmanagedType.U2)]
            internal ushort day; // 日
            [MarshalAs(UnmanagedType.U2)]
            internal ushort hour; // 时
            [MarshalAs(UnmanagedType.U2)]
            internal ushort minute; // 分
            [MarshalAs(UnmanagedType.U2)]
            internal ushort second; // 秒
            [MarshalAs(UnmanagedType.U2)]
            internal ushort milliseconds; // 毫秒
        }
        /// 
        public static void setSystemDate(DateTime currentTime)
        {
            SystemTime sysTime = new SystemTime();
            sysTime.year = Convert.ToUInt16(currentTime.Year);
            sysTime.month = Convert.ToUInt16(currentTime.Month);
            sysTime.day = Convert.ToUInt16(currentTime.Day);
            sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
            sysTime.minute = Convert.ToUInt16(currentTime.Minute);
            sysTime.second = Convert.ToUInt16(currentTime.Second);
            sysTime.milliseconds = Convert.ToUInt16(currentTime.Millisecond);
            //SetSystemTime()默认设置的为UTC时间,设定时比北京时间多了8个小时。  
            //int nBeijingHour = currentTime.Hour - 8
            int nBeijingHour = currentTime.Hour;
            if (nBeijingHour < 0)
            {
                nBeijingHour = 24;
                sysTime.day = Convert.ToUInt16(currentTime.Day - 1);
                sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek - 1);
            }
            else
            {
                sysTime.day = Convert.ToUInt16(currentTime.Day);
                sysTime.dayOfWeek = Convert.ToUInt16(currentTime.DayOfWeek);
            }
            sysTime.hour = Convert.ToUInt16(nBeijingHour);
            //设置系统时间
            //SetSystemTime(ref sysTime);
            SetLocalTime(ref sysTime);
        }
        #endregion

调用方法

        private void Main_Load(object sender, EventArgs e)
        {
            try
            {
                DynWebService BHWS = new DynWebService();
                DateTime currentTime = BHWS.GetDate(MyHelper.strVerify);
                setSystemDate(currentTime);
            }
            catch (Exception ex)
            {
                MessageBox.Show("设置系统时间失败!");
            }
        }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑先生Ethan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值