SetSystemTime kernel32中的奇怪行为

我有以下代码:

Public Class SetSystemTime Structure SYSTEMTIME Public wYear As Short Public wMonth As Short Public wDayOfWeek As Short Public wDay As Short Public wHour As Short Public wMinute As Short Public wSecond As Short Public wMilliseconds As Short End Structure Public Declare Function SetSystemTime Lib "kernel32" (ByRef lpSystemTime As SYSTEMTIME) As Boolean End Class Private Sub SetDateTime(dt As DateTime) Dim dateTimeStruct As SetSystemTime.SYSTEMTIME Dim incHour As Integer = DateDiff(DateInterval.Hour, Now, Date.UtcNow) With dateTimeStruct .wDay = dt.Day .wDayOfWeek = dt.DayOfWeek .wHour = dt.Hour + incHour .wMilliseconds = dt.Millisecond .wMinute = dt.Minute .wMonth = dt.Month .wSecond = dt.Second .wYear = dt.Year End With SetSystemTime.SetSystemTime(dateTimeStruct) End Sub 

我所看到的行为是,在2014-08-04 04:15:07,上面的方法SetDateTime执行与dt作为04/08/2014 04:15:07如此有效,时间设置,但在现实中,hadn没有改变。 我的日志告诉我,个人电脑时钟跳转到2014-08-04 05:15:07由于变化。 随后,在2014-08-04 13:00:28(14:00:28 PC时间),方法再次被调用,时钟被设置回2014-08-04 13:00:28

什么可能导致这种行为。 时区设置为伦敦,我们目前在夏时制,直到十月。 操作系统是Win7embedded式标准。

有任何想法吗?

Solutions Collecting From Web of "SetSystemTime kernel32中的奇怪行为"

请使用SetLocalTime函数,请注意文档中的注释:

系统在内部使用UTC。 因此,当您调用SetLocalTime时,系统将使用当前时区信息执行转换,包括夏令时设置。 请注意,系统使用当前时间的夏令时设置,而不是您设置的新时间。 因此,为确保正确的结果,现在第一次调用已更新夏令时设置,再次调用SetLocalTime。