【问题标题】:When querying the Win32_NTLogEvent Class from WMI with WQL is the TimeGenerated property based on Local time of the computer or GMT?当使用 WQL 从 WMI 查询 Win32_NTLogEvent 类时,TimeGenerated 属性是基于计算机的本地时间还是 GMT?
【发布时间】:2010-06-17 15:47:47
【问题描述】:

我正在编写一个 C# Windows 服务,该服务正在处理一些域控制器上的事件日志。其中一些是 Windows Server 2003,一些是 Windows Server 2008。服务停止后,我试图从日志中中断的地方继续。为了做到这一点而不是

SELECT * FROM Win32_NTLogEvent WHERE --criteria for events I am looking for

我在做

SELECT * FROM Win32_NTLogEvent WHERE TimeGenerated = --some date AND --criteria for events I am looking for

在某一时刻,我确信 TimeGenerated 字段是服务器的本地时间,但现在 Windows 2008 服务器似乎正在使用 GMT 来记录该时间。任何人都可以阐明这是否是两个操作系统运行方式之间的真正不同还是这是一个配置问题?

【问题讨论】:

    标签: c# wmi wql windows-services


    【解决方案1】:

    此外,似乎在 Windows Server 2008 之前的版本中,TimeGenerated 以本地时间返回,但在 Server 2008 中更改为 GMT,正如其他人所注意到的那样。

    【讨论】:

    • 我在发布问题之前已经看过上述链接,他们让我寻找似乎不存在的问题。我刚刚查询了我的 2003 服务器,它返回了 GMT,就像我的 2008 服务器一样。我并不是说它从未返回本地时间,而是我的 2003 sp2 服务器当前正在返回 GMT。感谢您的回答,但事实证明我遇到了另一个问题。
    【解决方案2】:

    Windows 时间戳始终以 UTC 记录。它们只会在您用于查看数据的任何 GUI 程序中转换为本地时间,例如事件查看器或资源管理器(用于文件时间)。这种行为对于避免夏令时转换的随机失败很重要。

    【讨论】:

      【解决方案3】:

      这样的事情可能会有所帮助:

      ("Select * from Win32_NTLogEvent Where Logfile = 'Application' AND EventCode = '999' AND Message Like '%message%' AND TimeGenerated = '201202210000000000.000000+***'")

      TimeGenerated 语法是向后设置的,因此在上面的示例中,它的yearmonthdaytimeminutesseconds.000000+\*** 需要前面的000000+\***

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        相关资源
        最近更新 更多