0

Web フォーラムからサンプル コードを 1 つ見つけました。習い始めた頃。出力が非常に奇妙であることがわかりました。

コードがうまく動かないのはなぜですか?

以下のコードを実行すると、常に 8 時間進みます。

VS2005とWinXPを使用しております。よろしくお願いします。

class Tester
    {
        [System.Runtime.InteropServices.DllImport("kernel32", SetLastError =
        true)]
        private static extern bool GetSystemTime(out SYSTEMTIME systemTime);
        [System.Runtime.InteropServices.DllImport("kernel32", SetLastError =
        true)]
        private static extern bool SetSystemTime(ref SYSTEMTIME systemTime);
        struct SYSTEMTIME
        {
            internal short wYear;
            internal short wMonth;
            internal short wDayOfWeek;
            internal short wDay;
            internal short wHour;
            internal short wMinute;
            internal short wSecond;
            internal short wMilliseconds;
        }
        static void Main()
        {
            SYSTEMTIME st;
            if (GetSystemTime(out st))
            {
                st.wHour = 2;   // new system time was set to nearby 10:00 AM, 2 + 8
                // If i replace the line with below one. 
                // st.wHour = 18;  // new system time was set to nearby 2:00 AM next day, 18 + 8 = 26, 26 - 24. go to next day!
                if (SetSystemTime(ref st))
                    Console.WriteLine("success");
                else
                    Console.WriteLine(System.Runtime.InteropServices.Marshal.GetLastWin32Error());
            }
            else
                Console.WriteLine("GetSystemTime failed: {0}",
                System.Runtime.InteropServices.Marshal.GetLastWin32Error());
        }
    }
4

2 に答える 2

1

システム時間は UTC で返されます - 代わりに GetLocalTime を使用してください:

http://msdn.microsoft.com/en-us/library/ms724390(VS.85).aspx

于 2010-06-29T08:29:00.380 に答える
1

GetSystemTime 関数

現在のシステムの日付と時刻を取得します。システム時刻は協定世界時 (UTC) で表されます。

現在のシステムの日付と時刻を現地時間で取得するには、GetLocalTime関数を使用します。

于 2010-06-29T08:30:01.267 に答える