Почему SetSystemTime () ведет себя иначе во второй половине дня? - PullRequest
0 голосов
/ 07 июня 2018

Я написал приведенный ниже класс для изменения даты системы, но я не могу понять, почему она работает по-разному в разное время дня:

  • Утро: точное время, переданное SetTime()устанавливается как системное время.
  • Дни: время, переданное SetTime() + 1 час, устанавливается как системное время, откуда берется дополнительный час?

.

public class SystemDateTimeController
{        

[DllImport("kernel32.dll", EntryPoint = "SetSystemTime", SetLastError = true)]
private extern static bool Win32SetSystemTime(ref SYSTEMTIME sysTime);       


    private struct SYSTEMTIME
    {
        public ushort wYear;
        public ushort wMonth;
        public ushort wDayOfWeek;
        public ushort wDay;
        public ushort wHour;
        public ushort wMinute;
        public ushort wSecond;
        public ushort wMilliseconds;
    }

    public static void SetTime(DateTime NewDateTime)
    {
        try
        {
            SYSTEMTIME systime = new SYSTEMTIME();

            systime.wMilliseconds = (ushort)NewDateTime.Millisecond;
            systime.wSecond = (ushort)NewDateTime.Second;
            systime.wMinute = (ushort)NewDateTime.Minute;
            systime.wHour = (ushort)NewDateTime.Hour;

            systime.wDayOfWeek = (ushort)NewDateTime.DayOfWeek;

            systime.wDay = (ushort)NewDateTime.Day;
            systime.wMonth = (ushort)NewDateTime.Month;
            systime.wYear = (ushort)NewDateTime.Year;

            Win32SetSystemTime(ref systime);
        }
        catch (Exception e)
        {
            Log("Failed to set system date time to: " + NewDateTime.ToString() + ". Exception: " + e.ToString());
        }

    }

}

Я знаю точное время, потраченное на SetTime() и для тестирования фиктивных значений и для исключения любых возможностей сделать с источником я даже передал жестко закодированную строку: Convert.ToDateTime("07/06/2018 13:00:00");

1 Ответ

0 голосов
/ 07 июня 2018

SetSystemTime ожидает UTC.Оператор передает свое местное время, вот в чем проблема (благодаря @ IInspectable )

Для вашей цели лучше использовать SetLocalTime , который всегда использует ваш местный часовой пояс.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...