Воспроизвести:
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 из текстового поля. Результат был таким же.