CIM_DATETIME

可以使用特定于 WMI 和 CIM 的两种固定长度格式之一访问 WMI 中的所有通用信息模型 (CIM) 日期和时间。 在脚本编写中,使用 SWbemDateTime 对象将它们转换为常规日期和时间。

以下部分介绍如何使用 WMI 日期和时间格式。

格式

下表列出了 WMI 使用的两种日期和时间格式。

格式 说明
DATETIME
yyyymmddHHMMSS.mmmmmmsUUU
存储 CIM DATETIME 值采用的格式。 此格式与区域设置无关,因此你可编写在任何计算机上运行的脚本。 在托管对象格式 (MOF) 中,或者在使用 COM API for WMIWMI 的脚本 API 写入实例时,必须使用此格式定义日期和时间。 有关详细信息,请参阅修改实例属性
仅在 WMI 查询语言 (WQL) 查询中有效的格式。
yyyy-mm-dd HH:MM:SS:mmm
此格式可用于使用 SWbemDateTime 方法的脚本。 有关详细信息,请参阅查询 WMI使用 WQL 进行查询。 此格式与区域设置有关。 年月日的顺序取决于用户会话的区域和语言格式设置。 例如,虽然美国英语的默认设置为“mm-dd-yyyy hh:mm:ss:mmm”,但大多数其他国家/地区的格式为“yyyy-mm-dd hh:mm:ss:mmm”。

下表列出了格式的字段。

字段 说明
yyyy 四位数年份(0000 到 9999)。 你的实现可限制支持的范围。 例如,实现只能支持年份 1980 至 2099。
mm 两位数月份(01 到 12)。
dd 一个月中的两位数日期(01 到 31)。 此值必须与月份相符。 例如,2 月 31 日是无效的。 但是,你的实现不必检查有效数据。
HH 一天中使用 24 小时制的两位数小时(00 到 23)。
MM 一个小时中的两位数分钟(00 到 59)。
SS 一分钟里的两位数秒(00 到 59)。
mmmmmm 一秒中的两位数微秒(000000 到 999999)。 你的实现不必支持使用此字段进行计算。 但是,必须始终存在此字段,以使字符串保持在固定长度。
mmm 一分钟里的三位数秒(000 到 999)。
s 加号 (+) 或减号 (-),表示与协调世界时 (UTC) 的正偏移量或负偏移量。
UUU 三位数偏移量,指示原始时区偏离 UTC 的分钟数。 对于 WMI,要将时间转换为 GMT(UTC 偏移量为零),建议使用此字段,但这并非必需。

必须输入具有指定长度的所有字段,根据需要为类型使用前导零。 不过,请使用星号来指示未使用的字段,或者将星号用作通配符值。 除了查询的 WHERE 子句外,可在其他任何位置使用星号 (*)。 例如,未指定年份的日期和时间可能发生在任何年份。 如果希望将字段保留在未指定状态,必须用星号替换整个字段。

以下示例描述了星号的有效用法和无效用法:

  • 19980416******.000000+***(合法)
  • 1998-04-16 ******:***(非法)
  • 199*0416******.000000+***(非法)
  • 199*-04-16 ******:***(非法)

如果使用 datetime 表示特定时间点,其所有字段都应包含数据。 如果它用于表示一个时间范围,则只有表示持续时间所需的字段应包括数据。

以下示例描述了“四月一号”:与该日期相对的是某个未指定的年份,但如果度量细节级别为一天,它仍然是一个已定义的时间点。

  • ****0401******.000000+***
  • ****-04-01 ******:***(非法)

设置 UTC 偏移量和 GMT

以下示例介绍如何通过在 UUU 字段中的加号或减号后放置星号来定义没有时区的时间:

  • 19980401135809.000000+***
  • 19980401135809.000000-***
  • 1998-04-01 13:58:09:***(非法)

应用程序将未分区的日期和时间引用解释为执行操作系统中的本地抽象计时器。 例如,便携式计算机可以有内部时钟,其设置可能与地理时区对应,也可能不对应。 可通过替换当前抽象时间源的时区而不是本地时区来解释未分区的时间。

应特别注意查询中带有日期和时间的 UTC 偏移量的含义。 一般情况下,如果日期和时间使用相同的 UTC 偏移量,则可在两个日期和时间之间进行比较来确定是相等、大于还是小于。 处理具有不同时区偏移量的日期和时间时,应首先将日期和时间转换为 GMT。

如果查询涉及一个或多个子字段中带有星号的相对日期和时间,那么这些查询只有在比较是否相等时才对 WMI 有意义。 此外,WMI 不允许使用星号作为通配符。 相反,WMI 逐个字符比较相对日期和时间。

以下示例描述了 WMI 查询认为不相等的两个日期:

  • 19980401135809.000000+***
  • 19980401135809.000000+000

转换为 FILETIME 或 VT_DATE 格式

CIM DATETIME 格式仅在 WMI 中使用。 可通过调用 SWbemDateTime 脚本对象的方法,在 WMI 格式与 FILETIME 或 VT_DATE 格式之间进行转换。 FILETIME 日期/时间结构是 32 位 Windows 操作系统使用的 64 位值。 VT_DATE 格式是 Visual Basic 和 ActiveX 使用的自动化变体日期/时间值。 下表列出了转换方法。

方法 说明
SWbemDateTime.GetFileTime 获取 FILETIME 格式的 DATETIME 值。
SWbemDateTime.GetVarDate 获取 VT_DATE 格式的 DATETIME 值。
SWbemDateTime.SetFileTime 使用 FILETIME 日期作为输入来设置 DATETIME 属性。
SWbemDateTime.SetVarDate 使用 VT_DATE 日期作为输入来设置 DATETIME 属性。

日期和时间格式

关于 WMI

WMI 任务:日期和时间

时间间隔格式

SWbemObject.Put_

SWbemServicesEx.Put

SWbemDateTime

IWbemClassObject::Put

IWbemServices::PutClass