2012-11-25 40 views
2

我使用SYSTEMTIME結構來改變我的系統日期時間就像如下:使用SYSTEMTIME更改日期和時間在24模式

[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模式。 你能幫我解答嗎?

+0

您能否顯示您的SYSTEMTIME結構定義?你剛剛從pinvoke.net抓住它嗎? –

+0

'SetSystemTime'的返回值是什麼? –

回答

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

wYear:1601-30827

wMonth:1-12

wDayOfWeek:0-6

wDay:1-31

wHour :0-23

wMinute:0-59

wSecond:0-59

wMilliseconds:0-999

1

我不能重現此。通過下面的一個非常簡單的控制檯應用程序,我可以要麼讓它什麼都不做(正常運行,沒有提升的權限)我可以更改日期和時間(以管理員身份運行)。它從不改變日期。但是,這在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); 
    } 
}