SWbemDateTime オブジェクト

SWbemDateTime オブジェクトは、共通情報モデル (CIM) の datetime 値を解析して設定するためのヘルパー オブジェクトです。 これは SWbemObjectPath と同様の役割を果たします。これにより、オブジェクト パスの書式設定と解釈がサポートされます。 VBScript CreateObject 呼び出しを使用して、SWbemDateTime オブジェクトを作成できます。

SWbemDateTime オブジェクトは、オブジェクトのメソッドを使用して、VT_DATE 値または FILETIME 値のいずれかで初期化および書式設定できます。 オブジェクトのプロパティを使用して、値をコンポーネントの年、月、日、時間、分、秒、またはマイクロ秒に解析できます。 SWbemDateTime オブジェクトは、ローカルまたは協定世界時 (UTC) の値に書式設定できます。 詳細については、「日付と時刻の形式」を参照してください。

SWbemDateTime は、初期化が安全であるとマークされている唯一の Windows Management Instrumentation (WMI) スクリプト オブジェクトであり、インターネット エクスプローラーの HTML ページで実行されているスクリプトです。

メンバー

SWbemDateTime オブジェクトには、次の種類のメンバーがあります。

メソッド

SWbemDateTime オブジェクトには、次のメソッドがあります。

メソッド 説明
GetFileTime BSTR として表される FILETIME の日付と時刻を WMI DATETIME 形式に変換します。
GetVarDate WMI DATETIME 形式の日付と時刻の値を VT_DATE に変換します。
SetFileTime WMI DATETIME 形式を、BSTR として表される FILETIME の日付と時刻に変換します。
SetVarDate VT_DATE 形式の日付と時刻の値を WMI DATETIME に変換します。

プロパティ

SWbemDateTime オブジェクトには、次のプロパティがあります。

プロパティ アクセスの種類 説明
日間
読み取り/書き込み
CIM datetime 値の日コンポーネント。
DaySpecified
読み取り/書き込み
日を指定するか、ワイルドカードとして残すかを示します。
時間数
読み取り/書き込み
CIM datetime 値の、一日のうちでの時間のコンポーネント。
HoursSpecified
読み取り/書き込み
時間を指定するか、ワイルドカードとして残すかを示します。
IsInterval
読み取り/書き込み
CIM datetime の少なくとも 1 つのコンポーネントが日付ではなく間隔を表していることを示します。
マイクロ秒
読み取り/書き込み
CIM datetime 値のマイクロ秒コンポーネント。
MicrosecondsSpecified
読み取り/書き込み
マイクロ秒コンポーネントを指定するか、ワイルドカードとして残すかを示します。

読み取り/書き込み
CIM datetime 値の分コンポーネント。
MinutesSpecified
読み取り/書き込み
分コンポーネントを指定するか、ワイルドカードとして残すかを示します。
Month
読み取り/書き込み
CIM datetime 値の月コンポーネント。
MonthSpecified
読み取り/書き込み
月を指定するか、ワイルドカードとして残すかを示します。

読み取り/書き込み
CIM datetime 値の秒コンポーネント。
SecondsSpecified
読み取り/書き込み
秒コンポーネントを指定するか、ワイルドカードとして残すかを示します。
UTC
読み取り/書き込み
CIM datetime 値の UTC コンポーネント。
UTCSpecified
読み取り/書き込み
UTC コンポーネントを指定するか、ワイルドカードとして残すかを示します。

読み取り/書き込み
完全な CIM datetime 値。
Year
読み取り/書き込み
CIM datetime 値の年コンポーネント。
YearSpecified
読み取り/書き込み
年を指定するか、ワイルドカードとして残すかを示します。

解説

WMI は、タイムスタンプを世界時座標 (UTC) 形式で記録します。 UTC は、ほとんどの開発者と IT 管理者が使用する形式ではありません。 したがって、一般的な問題は、UTC をより読みやすいものに変換する方法を決定することです。 UTC の使用方法の詳細については、「WMI タスク: 日付と時刻」および「WMI を使用した日付と時刻の値の操作」を参照してください。 さらに詳細については、「It s About Time (Oh, and About Dates, Too)」のブログ投稿も参照してください。

IsInterval プロパティが FALSE に設定されている場合、任意の数値フィールドにワイルドカード値を指定できます。 ワイルドカード値をもつフィールドには、フィールド全体にアスタリスクが含まれています。

各プロパティ (たとえば Day など) には、対応する指定されたブール値 (DaySpecified など) があります。 DaySpecifiedFALSE の場合、値は 01 から 31 の間の数値ではなく、間隔として解釈されます。 CIM datetime 値のいずれかの場所で間隔が使用されている場合、IsIntervalTRUE に設定されます。 既定では、CIM datetime 値には日付 (1 つ以上の間隔ではなく) が含まれています。

たとえば、SWbemDateTime.DaySpecifiedTRUE の場合、SWbemDateTime.Value には SWbemDateTime.Day の現在の値が含まれます。そうでない場合はワイルドカード値です。 どちらの場合も、IsInterval プロパティは FALSE です。

次のスクリプト コード例では、SWbemDateTime オブジェクトを使用して、WMI リポジトリから読み取られた datetime プロパティ値 (Win32_OperatingSystemInstallDate プロパティ) を解析する方法を示しています。

' 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 リポジトリから読み取られたプロパティの interval 値を変更する方法を示しています。

' 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 オブジェクトのインスタンスを作成し、OS のインストール日を取得し、その日付を別の形式に変換します。

# 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
Header
Wbemdisp.h
タイプ ライブラリ
Wbemdisp.tlb
[DLL]
Wbemdisp.dll
CLSID
CLSID_SWbemDateTime
IID
IID_ISWbemDateTime

関連項目

WbemCimtypeEnum

DATETIME

スクリプト API オブジェクト