Board logo

标题: [问题求助] VBS的SWbemDateTime对象的FILETIME format 是怎么定义的?[已解决] [打印本页]

作者: czjt1234    时间: 2013-3-7 10:59     标题: VBS的SWbemDateTime对象的FILETIME format 是怎么定义的?[已解决]

本帖最后由 czjt1234 于 2013-3-9 07:39 编辑

学习SWbemDateTime对象

但是为了搞明白
UTC 是啥
CIM_DATETIME 格式是怎样定义的
Interval Format 格式是怎样定义的
VT_DATE 格式是怎样定义的
为了搞清楚这几个单词,已经花了累计9个多小时了

还有个 FILETIME format 不知道到底是怎么定义的

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724284(v=vs.85).aspx
这里是什么乱七八糟的?
作者: czjt1234    时间: 2013-3-7 13:37

  1. Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  2. objSWbemDateTime.SetVarDate("2000-1-2 18:30:00")
  3. objSWbemDateTime.IsInterval = True
  4. Msgbox objSWbemDateTime.Value
复制代码


这里显示的时间长度是2天18小时30分钟,这是怎么算的?
作者: czjt1234    时间: 2013-3-9 07:37

WMI有自己的日期和时间格式,该格式与代码页无关

WMI用于表示时间刻度的格式CIM_DATETIME:yyyymmddHHMMSS.mmmmmmsUUU
其中:yyyy年 mm月 dd日 HH小时 MM分 SS秒 mmmmmm微秒
s为+或-,分别代表东时区和西时区
UUU表示相对于UTC标准时间,相差多少分钟
比如东8区,相对于UTC标准时间,相差8小时,就是480分钟,记作+480。西5区则记作-300

WMI还有用于表示时间长度的格式Interval Format:ddddddddHHMMSS.mmmmmm:000
其中:dddddddd天数 HH小时 MM分 SS秒 mmmmmm微秒
最后的:000是固定格式

WMI支持VT_DATE格式,这是本地时间,与代码页相关
该格式是按照"控制面板"→"区域和语言选项"里设置的"短日期 时间"显示的
vbs里的Now函数返回的也是VT_DATE格式
如果你在控制面板里改变了区域设置,那么VT_DATE格式也会随之改变

FILENAME格式,表示一个时间长度值,精确到0.0000001秒=0.1微秒=100纳秒
起始时间,微软定为:1601-01-01 00:00:00
从起始时间到指定时间的长度

北京时间2000年1月2日 18:30:00
按CIM_DATETIME格式记作20000102183000.000000+480
按VT_DATE格式显示为2000-1-2 18:30:00
  1. Set objSWbemDateTime = CreateObject("WbemScripting.SWbemDateTime")
  2. objSWbemDateTime.SetVarDate("2000-1-2 18:30:07")    '按VT_DATE格式输入时间
  3. 'objSWbemDateTime.SetFileTime("125913114070000000") '按FILENAME格式输入时间
  4. Msgbox "按VT_DATE格式输入本地时间:2000-1-2 18:30:07"                     & vbCrLf & vbCrLf & _
  5.        "输出:"                                                                    & vbCrLf & _
  6.        "FILENAME格式本地时间" & vbTab & objSWbemDateTime.GetFileTime()             & vbCrLf & _
  7.        "FILENAME格式UTC时间"  & vbTab & objSWbemDateTime.GetFileTime(False)        & vbCrLf & _
  8.        "VT_DATE格式本地时间"  & vbTab & objSWbemDateTime.GetVarDate()              & vbCrLf & _
  9.        "VT_DATE格式UTC时间"   & vbTab & objSWbemDateTime.GetVarDate(False)         & vbCrLf & _
  10.        "CIM_DATETIME格式"     & vbTab & objSWbemDateTime.Value
复制代码

作者: Demon    时间: 2013-3-9 22:55

VT_DATE只不过是double而已。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2