0

我正在编写一个 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 来记录该时间。任何人都可以阐明这是否是两个操作系统运行方式之间的真正不同,或者这是一个配置问题?

4

3 回答 3

1

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

于 2010-06-17T18:24:17.247 回答
0

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

于 2010-06-17T17:28:16.313 回答
0

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

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

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

希望这可以帮助。

于 2012-02-21T09:03:06.433 回答