首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SetSystemTime kernel32中的奇怪行为

SetSystemTime kernel32中的奇怪行为
EN

Stack Overflow用户
提问于 2014-08-07 09:10:03
回答 1查看 876关注 0票数 2

我有以下代码:

代码语言:javascript
复制
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嵌入式标准。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-07 13:41:57

相反,请使用SetLocalTime函数,并注意其文档中的备注:

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25178492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档