我有以下代码:
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执行的,因此有效地设置了时间,但实际上,had没有改变。我的日志显示,由于更改,PC时钟跳至2014-08-04 05:15:07。随后,在2014-08-04 13:00:28(PC时间14:00:28),再次调用该方法,并将时钟设置回2014-08-04 13:00:28
可能导致此行为的原因。时区设置为伦敦,我们目前处于夏令时,直到10月。操作系统是Win7 Embedded Standard。
有任何想法吗?
请改用SetLocalTime函数,请仔细注意其文档中的说明:
系统内部使用UTC。因此,当您调用SetLocalTime时,系统将使用当前时区信息来执行转换,包括夏令时设置。请注意,系统使用当前时间的夏时制设置,而不是您设置的新时间。因此,为了确保得到正确的结果,由于第一次调用已更新了夏令时设置,因此请再次调用SetLocalTime。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句