SWbemDateTime 对象
SWbemDateTime 对象是一个帮助程序对象,用于分析和设置通用信息模型 (CIM) 日期/时间值。 它扮演着类似于 SWbemObjectPath 的角色,为格式化和解释对象路径提供帮助。 你可以使用 VBScript CreateObject 调用来创建 SWbemDateTime 对象。
可以使用对象上的方法从 VT_DATE 或 FILETIME 值初始化和格式化 SWbemDateTime 对象。 使用对象的属性,可以将值分析为年、月、日、小时、分钟、秒或微秒组成部分。 SWbemDateTime 对象可以格式化为本地或协调世界时 (UTC) 值。 有关详细信息,请参阅日期和时间格式。
SWbemDateTime 是唯一标记为可安全用于初始化和脚本的、在 Internet Explorer 中的 HTML 页面上运行的 Windows Management Instrumentation (WMI) 脚本对象。
成员
SWbemDateTime 对象具有以下类型的成员:
方法
SWbemDateTime 对象具有这些方法。
方法 | 说明 |
---|---|
GetFileTime | 将表示为 BSTR 的 FILETIME 日期和时间转换为 WMI DATETIME 格式。 |
GetVarDate | 将 WMI DATETIME 格式的日期和时间值转换为 VT_DATE。 |
SetFileTime | 将 WMI DATETIME 格式转换为表示为 BSTR 的 FILETIME 日期和时间。 |
SetVarDate | 将 VT_DATE 格式的日期和时间转换为 WMI DATETIME。 |
属性
SWbemDateTime 对象具有这些属性。
属性 | 访问类型 | 说明 |
---|---|---|
Day |
读取/写入 |
CIM 日期/时间值的日部分。 |
DaySpecified |
读取/写入 |
指示是指定日还是将其保留为通配符。 |
小时 |
读取/写入 |
CIM 日期/时间值的小时部分。 |
HoursSpecified |
读取/写入 |
指示是指定小时还是将其保留为通配符。 |
IsInterval |
读取/写入 |
指示 CIM 日期/时间的至少一个组成部分表示间隔而不是日期。 |
微秒 |
读取/写入 |
CIM 日期/时间值的微秒部分。 |
MicrosecondsSpecified |
读取/写入 |
指示是指定微秒部分还是将其保留为通配符。 |
Minutes |
读取/写入 |
CIM 日期/时间值的分钟部分。 |
MinutesSpecified |
读取/写入 |
指示是指定分钟部分还是将其保留为通配符。 |
Month |
读取/写入 |
CIM 日期/时间值的月部分。 |
MonthSpecified |
读取/写入 |
指示是指定月还是将其保留为通配符。 |
Seconds |
读取/写入 |
CIM 日期/时间值的秒部分。 |
SecondsSpecified |
读取/写入 |
指示是指定秒部分还是将其保留为通配符。 |
UTC |
读取/写入 |
CIM 日期/时间值的 UTC 部分。 |
UTCSpecified |
读取/写入 |
指示是指定 UTC 部分还是将其保留为通配符。 |
值 |
读取/写入 |
完整的 CIM 日期/时间值。 |
Year |
读取/写入 |
CIM 日期/时间值的年部分。 |
YearSpecified |
读取/写入 |
指示是指定年还是将其保留为通配符。 |
备注
WMI 以协调世界时 (UTC) 格式记录时间戳。 UTC 并非大多数开发人员和 IT 管理员使用的格式。 因此,一个常见问题是确定如何将 UTC 转换为更易于阅读的格式。 有关如何使用 UTC 的详细信息,请参阅 WMI 任务:日期和时间以及使用 WMI 处理日期和时间。 还可以阅读关于时间(关于日期)博客文章了解更多信息。
如果 IsInterval 属性设置为 FALSE,则任何数字字段都可以包含通配符值。 包含通配符值的字段在整个字段中包含星号。
每个属性(例如 Day)具有一个指定的相应布尔值,例如 DaySpecified。 当 DaySpecified 为 FALSE 时,值将解释为间隔,而不是介于 01 和 31 之间的数字。 如果在 CIM 日期/时间值中的任何位置使用间隔,则 IsInterval 也设置为 TRUE。 默认情况下,CIM 日期/时间值包含日期而不是一个或多个间隔。
例如,如果 SWbemDateTime.DaySpecified 为 TRUE,则 SWbemDateTime.Value 包含 SWbemDateTime.Day 的当前值,否则为通配符值。 在这两种情况下,IsInterval 属性都是 FALSE。
示例
以下脚本代码示例演示如何使用 SWbemDateTime 对象分析从 WMI 存储库读取的日期/时间属性值,即 Win32_OperatingSystem 中的 InstallDate 属性。
' Create a new datetime object.
Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
' Retrieve a WMI object that contains a datetime value.
for each os in GetObject( _
"winmgmts:").InstancesOf ("Win32_OperatingSystem")
' The InstallDate property is a CIM_DATETIME.
MsgBox os.InstallDate
dateTime.Value = os.InstallDate
' Display the year of installation.
MsgBox "This OS was installed in the year " & dateTime.Year
' Display the installation date using the VT_DATE format.
MsgBox "Full installation date (VT_DATE format) is " _
& dateTime.GetVarDate
' Display the installation date using the FILETIME format.
MsgBox "Full installation date (FILETIME format) is " _
& dateTime.GetFileTime
next
Set datetime = Nothing
以下示例演示如何创建 SWbemDateTime 对象,将日期值存储在对象中,以本地和协调世界时 (UTC) 格式显示日期,并将值存储在新建的类和属性中。 有关常量 wbemCimtypeDatetime 的详细信息,请参阅 WbemCimtypeEnum。
' Create an SWbemDateTime object.
Set dateTime = CreateObject("WbemScripting.SWbemDateTime")
' Set the value
Const wbemCimTypeDatetime = 101
' Construct a datetime value using the intrinsic VBScript CDate
' function interpreting this as a local date/time in
' the Pacific time zone (-8 hrs GMT). Convert to CIM datetime
' using SetVarDate method. The year defaults to current year.
dateTime.SetVarDate (CDate ("January 20 11:56:32"))
' The value in dateTime displays as
' 20000120195632.000000-480. This is the equivalent time
' in GMT with the specified offset for PST of -8 hrs.
MsgBox "CIM datetime " & dateTime
' The value now displays as B=0/2000 11:56:32 AM because the
' parameter contains the default TRUE value causing the value to be
' interpreted as a local time.
MsgBox "Local datetime " & dateTime.GetVarDate ()
' The value now displays as B=0/2000 7:56:32 PM because the
' parameter value is FALSE, which indicates a GMT time.
' non-local time.
MsgBox "Datetime in GMT " & dateTime.GetVarDate (false)
' Create a new class and add a DateTime property value.
' SWbemServices.Get returns an empty SWbemObject
' which can become a new class. SWbemObject.Path_ returns an
' SWbemObjectPath object.
set NewObject = GetObject("winmgmts:root\default").Get
NewObject.Path_.Class = "NewClass"
' Add a new property named "InterestingDate" to the NewObject class
' and define its datatype as a CIM datetime value.
NewObject.Properties_.Add "InterestingDate", wbemCimtypeDatetime
' Set the new value of the SWbemDateTime object in the InterestingDate
' property.
NewObject.InterestingDate = dateTime.Value
MsgBox "Datetime in new object " & NewObject.InterestingDate
' Write the new class (named "NewClass") containing
' the SWbemDateTime object to the repository.
NewObject.Put_
WScript.Echo "NewClass is now in WMI repository"
' Clean up the example by deleting the new class from the repository
NewObject.Delete_
以下脚本代码示例演示如何使用 SWbemDateTime 对象修改从 WMI 存储库读取的属性中的间隔值。
' Construct an interval value of 100 days, 1 hour, and 3 seconds.
dateTime.IsInterval = true
dateTime.Day = 100
dateTime.Hours = 1
dateTime.Seconds = 3
' The datetime displays as 00000100010003.000000:000.
MsgBox "Constructed interval value " & datetime
' Retrieve an empty WMI object and add a datetime property.
Const wbemCimTypeDatetime = 101
Set NewObject = GetObject("winmgmts:root\default").Get
NewObject.Path_.Class = "Empty"
NewObject.Properties_.Add "InterestingDate", wbemCimtypeDatetime
' Set the new value in the property and update.
NewObject.InterestingDate = dateTime.Value
MsgBox "NewObject.InterestingDate = " & NewObject.InterestingDate
' Write the new SWbemDateTime object to the repository.
NewObject.Put_
' Delete the object.
NewObject.Delete_
以下脚本代码示例演示如何使用 SWbemDate 对象读取 FILETIME 值。
' Create a new datetime object.
Set datetime = CreateObject("WbemScripting.SWbemDateTime")
' Set from a FILETIME value (non-local).
' Assume a timezone -7 hrs. GMT.
MsgBox "FILETIME value " & "126036951652030000"
datetime.SetFileTime "126036951652030000", false
' Displays as 5/24/2000 7:26:05 PM.
MsgBox "GMT time " & dateTime.GetVarDate
' Set from a FILETIME value (local).
datetime.SetFileTime "126036951652030000"
' Displays as 5/25/2000 2:26:05 AM.
MsgBox "Same value in local time " & dateTime.GetVarDate
Set datetime = Nothing
以下 PowerShell 代码创建 SWbemDateTime 对象的实例,检索操作系统安装日期,并将日期转换为不同的格式
# Create swbemdatetime object
$datetime = New-Object -ComObject WbemScripting.SWbemDateTime
# Get OS installation time and assign to datetime object
$os = Get-WmiObject -Class Win32_OperatingSystem
$dateTime.Value = $os.InstallDate
# Now display the time
"This OS was installed in the year {0}" -f $dateTime.Year
"Full installation date (VT_DATE format) is {0}" -f $dateTime.GetVarDate()
"Full installation date (FILETIME format) is {0}" -f $dateTime.GetFileTime()
以下 Powershell 代码将代码转换为可供 CIM 提供程序使用的格式。
$time = (Get-Date)
$objScriptTime = New-Object -ComObject WbemScripting.SWbemDateTime
$objScriptTime.SetVarDate($time)
$cimTime = $objScriptTime.Value
要求
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows Vista |
最低受支持的服务器 |
Windows Server 2008 |
标头 |
|
类型库 |
|
DLL |
|
CLSID |
CLSID_SWbemDateTime |
IID |
IID_ISWbemDateTime |