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执行的,因此有效地设置了时间,但实际上,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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么 SetSystemTime() 在下午表现不同?

来自分类Dev

windbg帮助缺少kernel32函数

来自分类Dev

覆盖来自 kernel32 的调用

来自分类Dev

如何在Vb.Net中编写Copymem库“ Kernel32”别名“ Rtlmovememory”

来自分类Dev

Java JNA在Kernel32中找不到命名管道函数

来自分类Dev

Kernel32 VirtualAllocEx间歇返回IntPtr.Zero

来自分类Dev

为什么我的程序终止调用KERNEL32!FileTimeToSystemTime()?

来自分类Dev

NSIS 系统 kernel32::LoadLibrary 不搜索 Outdir 或 Path

来自分类Dev

GHCi中的奇怪行为

来自分类Dev

PHP中的奇怪行为

来自分类Dev

NSViewController中的奇怪行为

来自分类Dev

PHP中的奇怪行为

来自分类Dev

$ scope中的奇怪行为。

来自分类Dev

Laravel 中的奇怪行为

来自分类Dev

JNA Kernel32映射能否在32位计算机上工作?

来自分类Dev

递归函数中的奇怪/奇怪行为

来自分类Dev

在Nano Server上运行ASP.NET 5会引发“无法加载DLL'kernel32'”

来自分类Dev

本机库“ kernel32”被多个软件包链接到

来自分类Dev

导入kernel32函数以在C#中分配虚拟内存?

来自分类Dev

在Mono / Linux中使用FFmpeg.Autogen 4.1.0.2时找不到Kernel32

来自分类Dev

导入kernel32函数以在C#中分配虚拟内存?

来自分类Dev

来自 kernel32 的 vba dll 调用 writefile 创建巨大的文件

来自分类Dev

python中的奇怪线程行为

来自分类Dev

MATLAB中奇怪的rand()行为

来自分类Dev

“ body”标签中“ this”的奇怪行为

来自分类Dev

Chrome中的奇怪日期行为

来自分类Dev

JavaScript中奇怪的函数行为

来自分类Dev

PHP中奇怪的关闭行为

来自分类Dev

jQuery中的奇怪加法行为