找回密码
 加入
搜索
查看: 1963|回复: 9

[AU3基础] 像0x01D61304这样的日期编码如何转换成年月日【已解决】

[复制链接]
发表于 2020-5-1 18:08:31 | 显示全部楼层 |阅读模式
本帖最后由 bfgxp 于 2020-5-28 15:01 编辑

wim镜像导出的xml文件,记录的日期和时间就是这样的编码,该如何转换为年月日时分秒?
<CREATIONTIME>
<HIGHPART>0x01D61304</HIGHPART>
<LOWPART>0x0581EA62</LOWPART>
</CREATIONTIME>
<LASTMODIFICATIONTIME>
<HIGHPART>0x01D61304</HIGHPART>
<LOWPART>0x07DCCDBD</LOWPART>
</LASTMODIFICATIONTIME>

发表于 2020-5-2 23:14:32 | 显示全部楼层
本帖最后由 繁星 于 2020-5-3 00:59 编辑

help里边现成的不知道对不对
Local $HIGHPART = '0x01D61304', _
        $LOWPART1 = '0x0581EA62', _
        $LOWPART2 = '0x07DCCDBD'

ConsoleWrite('CREATIONTIME:' & _FormatTime($HIGHPART, $LOWPART1) & _
  @CRLF & 'LASTMODIFICATIONTIME:' & _FormatTime($HIGHPART, $LOWPART2) & @CRLF)

Func _FormatTime($HIGHPART, $LOWPART)
        Local $tagFILETIME = DllStructCreate('struct; dword Lo;dword Hi; endstruct'), _
                $tagSYSTEMTIME = DllStructCreate('struct; word Year;word Month;word Dow;word Day;word Hour;word Minute;word Second;word MSeconds; endstruct')
        DllStructSetData($tagFILETIME, 'Hi', Dec(StringTrimLeft($HIGHPART, 2)))
        DllStructSetData($tagFILETIME, 'Lo', Dec(StringTrimLeft($LOWPART, 2)))
        DllCall('kernel32.dll', 'bool', 'FileTimeToSystemTime', 'struct*', $tagFILETIME, 'struct*', $tagSYSTEMTIME)
        Return StringFormat("%04d/%02d/%02d %02d:%02d:%02d", _
                DllStructGetData($tagSYSTEMTIME, "Year"), _
        DllStructGetData($tagSYSTEMTIME, "Month"), _
                DllStructGetData($tagSYSTEMTIME, "Day"), _
                DllStructGetData($tagSYSTEMTIME, "Hour"), _
                DllStructGetData($tagSYSTEMTIME, "Minute"), _
                DllStructGetData($tagSYSTEMTIME, "Second"))
EndFunc
发表于 2020-5-3 00:52:57 | 显示全部楼层

大神,请教一下,什么原理??
看的蒙蒙的。。。
 楼主| 发表于 2020-5-3 07:27:05 | 显示全部楼层
自己找到了答案,高低位的16进制去0x用“&”连接,然后转换成10进制,得到的数是自1601年1月1日0时0分0秒以来所经历的100纳秒的倍数
处理方法就是
$iDec = int(Dec("01D613040581EA62", $NUMBER_AUTO)/10000000)
$sNewDate = _DateAdd( 's',$iDec, "1601/01/01 00:00:00")
MsgBox( 4096, "", "Date: " & $sNewDate )
发表于 2020-5-3 12:10:45 | 显示全部楼层
$NUMBER_AUTO 是什么?看来还是二楼的正确

点评

你把Data.AU3补齐了,你就知道啦。  发表于 2020-5-3 17:43
发表于 2020-5-3 14:16:40 | 显示全部楼层
参考学习,参考学习
发表于 2020-5-3 17:44:11 | 显示全部楼层
bfgxp 发表于 2020-5-3 07:27
自己找到了答案,高低位的16进制去0x用“&”连接,然后转换成10进制,得到的数是自1601年1月1日0时0分0秒以 ...

同样的疑问,为什么是“1601/01/01 00:00:00”??
 楼主| 发表于 2020-5-3 18:35:00 | 显示全部楼层
yuantian 发表于 2020-5-3 17:44
同样的疑问,为什么是“1601/01/01 00:00:00”??

不知道,这是微软的说明
https://docs.microsoft.com/zh-cn ... redirectedfrom=MSDN
发表于 2020-5-3 20:20:23 | 显示全部楼层
bfgxp 发表于 2020-5-3 18:35
不知道,这是微软的说明
https://docs.microsoft.com/zh-cn/windows/win32/api/minwinbase/ns-minwinbas ...

好的,谢谢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-6-17 23:04 , Processed in 0.075381 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表