重现:
1)将Microsoft.VisualBasic程序集添加到项目引用
2)将PC时区更改为:(GMT + 10:00)堪培拉,墨尔本,悉尼。确保将PC设置为自动调整夏令时的时钟。 (对于此时区,夏令时结束于2010年4月4日凌晨3点。)
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时,PC时钟最终显示凌晨2点,而预计凌晨1点。 (如果删除了标记为“XX”的代码,则时钟有时会显示正确的时间为凌晨1点。
知道发生了什么事吗? (或者是否有更可靠的方法从C#代码设置PC时钟?)
TIA。
编辑:
为回应David M,我尝试了一些修改后的代码:
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);
}
这从textBox获取DateTime输入。结果是一样的。
答案 0 :(得分:1)
我设置系统时间的方式一直使用SetSystemTime
,如下例所示:
http://www.pinvoke.net/default.aspx/kernel32.setsystemtime
不确定是否能解决您的问题,但也许值得一试。