通过SOS.dll查看调试器中的DateTime结构时,我看到......
0:096> !DumpVC 000007feed1ddff8 000000028036d890
Name: System.DateTime
MethodTable: 000007feed1ddff8
EEClass: 000007feecbed6b0
Size: 24(0x18) bytes
File: C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib. dll
Fields:
MT Field Offset Type VT Attr Value Name
000007feed1e1158 40000d6 0 System.UInt64 1 instance 5246421159766325152 dateData
如何将“5246421159766325152”解释为DateTime?有没有办法可以从这个值创建一个DateTime来获得人类可读的版本?
答案 0 :(得分:9)
!Psscor2.PrintDateTime OBJADD
R或!sosex.mdt System.DateTime DATAADDR
。
答案 1 :(得分:7)
DateTime.FromBinary(5246421159766325152)
答案 2 :(得分:1)
如果Int64值介于DateTime.MinValue。Ticks和DateTime.MaxValue。Ticks,则可以调用重载的构造函数来获取DateTime的Int64。
但您的特定值超出了此范围。正如@Boo所提到的,您可以使用静态DateTime.FromBinary方法。
答案 3 :(得分:0)
在这里,您可以找到一种使用脚本查看WinDBG本身的简单方法,然后您可以像以下一样简单地运行它:
0:000> $$>a<e:\Scripts\DumpDate.txt 0000003692816498
答案 4 :(得分:0)
撕掉UTC标志并直接从windbg命令行以人类可读的格式打印(从结果中减去1600年)
!filetime 0n5246421159766325152 & 0x3fffffffffffffff
5/25/3612 09:12:13.893(未知)