Попытка установить часы ПК программно до окончания летнего времени - PullRequest
1 голос
/ 25 мая 2010

Воспроизвести:

1) Добавьте сборку Microsoft.VisualBasic к вашей ссылке на проект

2) Изменить часовой пояс ПК на: (GMT + 10: 00) Канберра, Мельбурн, Сидней. Убедитесь, что компьютер настроен на автоматическую настройку часов на летнее время. (Для этого часового пояса летнее время заканчивается в 3 часа ночи 4 апреля 2010 года.)

3) добавить следующий код:

    public void SetNewDateTime(DateTime dt)
    {
        Microsoft.VisualBasic.DateAndTime.Today = dt; // ignores time component
        Microsoft.VisualBasic.DateAndTime.TimeOfDay = dt;  // ignores date component
    }

    private void button1_Click(object sender, EventArgs e)
    {
        DateTime dt = new DateTime(2010, 4, 5, 5, 0, 0);  // XX
        SetNewDateTime(dt);  // XX

        System.Threading.Thread.Sleep(500);

        DateTime dt2 = new DateTime(2010, 4, 4, 1, 0, 0);
        SetNewDateTime(dt2);
    }

4) При нажатии кнопки 1 часы ПК показывают 2 часа ночи, тогда как ожидалось 1 час ночи. (Если код, помеченный как «XX», удален, часы иногда показывают правильное время 1 часа ночи).

Есть идеи, что происходит? (Или есть более надежный способ установки часов ПК из кода C #?)

ТИА.

РЕДАКТИРОВАТЬ :

В ответ на Дэвида М я попытался изменить код:

    private void button1_Click(object sender, EventArgs e)
    {
        DateTime dt = new DateTime(2010, 4, 5, 5,0,0, DateTimeKind.Unspecified);
        SetNewDateTime(dt);

        System.Threading.Thread.Sleep(500);

        // type : 2010-04-04T01:00:00 into textBox1

        DateTime dt2 = System.Xml.XmlConvert.ToDateTime(textBox1.Text, System.Xml.XmlDateTimeSerializationMode.Unspecified);

        SetNewDateTime(dt2);
    }

Получает данные DateTime из текстового поля. Результат был таким же.

1 Ответ

1 голос
/ 25 мая 2010

При настройке системного времени я всегда использовал SetSystemTime, как в примере здесь:

http://www.pinvoke.net/default.aspx/kernel32.setsystemtime

Не уверен, решит ли это вашу проблему, но, возможно, стоит попробовать.

...