CIM_DATETIME

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

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

Format

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

格式 说明
DATETIME
yyyymmddHHMMSS.mmmmmmsUUU
存储 CIM DATETIME 值的格式。 此格式与区域无关,因此可以编写在任何计算机上运行的脚本。 在托管对象格式 (MOF) 定义日期和时间时,或者在使用 COM API for WMIScripting API for WMI 写入实例时必须使用此格式。 有关详细信息,请参阅修改实例属性
格式仅在 WMI Query Language (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 ******:***(非法)

如果日期时间用于表示特定时间点,则其所有字段都应包含数据。 如果用于表示一系列时间,则只应包含表达持续时间所需的字段数据。

以下示例描述“April first”:一个相对于某些未指定年份的日期,但如果度量详细信息级别为一天,则仍为已定义的点。

  • ****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