使用SYSTEMTIME以24模式更改date和时间

我使用SYSTEMTIME结构来更改我的系统date时间如下所示:

[DllImport("kernel32.dll")] public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime); private void button1_Click(object sender, EventArgs e) { SYSTEMTIME st = new SYSTEMTIME(); st.wYear = 2009; st.wMonth = 1; st.wDay = 1; st.wHour = 23; st.wMinute = 1; st.wSecond = 1; SetSystemTime(ref st); } 

date已更改,但时间不受影响我想在24模式下更改我的系统date和时间。 你能帮我一下吗?

我无法重现这一点。 有了一个非常简单的控制台应用程序,我可以让它什么都不做(正常运行,没有提升的权限), 或者我可以改变日期和时间(以管理员身份运行)。 它从来没有改变只是日期。 但是,在Windows 7上启用了UAC。 也许你正在运行在不同的版本,或不同的访问控制? 我强烈怀疑这是一个访问控制问题。

 using System; using System.Runtime.InteropServices; [StructLayout(LayoutKind.Sequential)] struct SYSTEMTIME { [MarshalAs(UnmanagedType.U2)] public short Year; [MarshalAs(UnmanagedType.U2)] public short Month; [MarshalAs(UnmanagedType.U2)] public short DayOfWeek; [MarshalAs(UnmanagedType.U2)] public short Day; [MarshalAs(UnmanagedType.U2)] public short Hour; [MarshalAs(UnmanagedType.U2)] public short Minute; [MarshalAs(UnmanagedType.U2)] public short Second; [MarshalAs(UnmanagedType.U2)] public short Milliseconds; } class Test { [DllImport("kernel32.dll")] public extern static uint SetSystemTime(ref SYSTEMTIME lpSystemTime); static void Main() { SYSTEMTIME st = new SYSTEMTIME(); st.Year = 2009; st.Month = 1; st.Day = 1; st.Hour = 23; st.Minute = 1; st.Second = 1; SetSystemTime(ref st); } } 

SYSTEMTIME应该看起来像这样:

 typedef struct _SYSTEMTIME { WORD wYear; WORD wMonth; WORD wDayOfWeek; WORD wDay; WORD wHour; WORD wMinute; WORD wSecond; WORD wMilliseconds; } SYSTEMTIME, *PSYSTEMTIME; 

SetSystemTime()应成功返回true。

时间设置为24小时制。

年:1601-30827

wMonth:1-12

wDayOfWeek:0-6

wDay:1-31

时间:0-23

wMinute:0-59

第二:0-59

wMilliseconds:0-999