我有以下代码:
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 :15:07,上面的方法SetDateTime在dt中被执行为04/08/2014 04:15:07 --如此有效,时间被设定,但实际上,并没有改变。我的日志显示,由于变化,PC时钟跳到了2014-08-04 :15:07。随后,在2014-08-04 13:00:28 (14:00:28 PC时间),该方法再次被调用,时钟被调回到2014-08-04 13:28。
什么可能会导致这种行为。时区设置在伦敦,我们目前在夏令到十月。操作系统是Win7嵌入式标准。
有什么想法吗?
发布于 2014-08-07 13:41:57
相反,请使用SetLocalTime函数,并注意其文档中的备注:
系统内部使用UTC。因此,当您调用SetLocalTime时,系统将使用当前的时区信息来执行转换,包括夏令时设置。请注意,系统使用的是当前时间的夏令时设置,而不是您正在设置的新时间。因此,为了确保结果正确,第二次调用SetLocalTime,现在第一次调用已经更新了夏令时设置。
https://stackoverflow.com/questions/25178492
复制相似问题