You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无视UTC直接设置系统时间?C#代码执行异常求助

解决系统时间设置时区偏移问题

嘿,这个问题我太熟了!你遇到的核心问题是Windows API的时间设置函数区分UTC和本地时间——你大概率用了SetSystemTime,这个函数要求传入的是UTC时间,而你直接把想要的本地时间(凌晨1点)传进去了,系统自动做了时区转换(UTC+8),所以最终本地时间变成了1+8=9点。

解决方案:改用SetLocalTime API

SetLocalTime是专门用来设置本地系统时间的API,不需要时区转换,你传入的时间就是最终显示的本地时间。下面是修正后的完整代码示例:

首先,修正结构体和API导入:

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

public partial class YourForm : Form
{
    // 定义SYSTEMTIME结构体,和原来的结构一致
    [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;
    }

    // 导入SetLocalTime API(替换原来的SetSystemTime)
    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime);

    public YourForm()
    {
        InitializeComponent();
    }

    private void btnSetTime_Click(object sender, EventArgs e)
    {
        // 设置你想要的本地时间:2018年4月25日凌晨1:00:00
        SYSTEMTIME st = new SYSTEMTIME();
        st.wYear = 2018;
        st.wMonth = 4;
        st.wDay = 25;
        st.wHour = 1; // 这里直接填写本地时间的小时,无需时区调整
        st.wMinute = 0;
        st.wSecond = 0;
        st.wMilliseconds = 0;

        // 调用API设置本地时间
        bool result = SetLocalTime(ref st);
        if (!result)
        {
            // 失败时可获取错误码排查问题
            int errorCode = Marshal.GetLastWin32Error();
            MessageBox.Show($"设置时间失败,错误码:{errorCode}");
        }
        else
        {
            MessageBox.Show("时间设置成功!");
        }
    }
}

关键注意点

  • 管理员权限:更改系统时间需要管理员权限,你的程序必须以管理员身份运行。可以在项目属性里设置“要求管理员权限”,或者右键程序选择“以管理员身份运行”。
  • 如果之前坚持要用SetSystemTime,也可以把目标本地时间转换为UTC时间再传入,但显然SetLocalTime更直接,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Arch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:18:05