Получить и установить системное время в C # - PullRequest
0 голосов
/ 29 июня 2010

Я нашел один пример кода с веб-форума. Когда я начал изучать это. Я нашел выход очень странным.

Почему код не может работать хорошо?

Когда я запускаю приведенный ниже код, всегда идет вперед 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());
        }
    }

Ответы [ 2 ]

1 голос
/ 29 июня 2010

Функция GetSystemTime

Извлекает текущую системную дату и время. Системное время выражается в всемирном координированном времени (UTC).

Чтобы получить текущую системную дату и время по местному времени, используйте функцию GetLocalTime

1 голос
/ 29 июня 2010

Системное время возвращается в UTC - вместо этого используйте GetLocalTime:

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

...