2

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

 [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);
 }

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

4

2 回答 2

1

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

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);
   } 
}
于 2012-11-25T19:56:06.163 回答
0

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 小时制。

w年:1601-30827

w月:1-12

wDayOfWeek:0-6

wDay: 1-31

小时:0-23

w分钟:0-59

w秒:0-59

w毫秒:0-999

于 2012-11-25T19:55:56.383 回答