通过 SOS.dll 查看调试器中的 DateTime 结构时,我看到...
0:096> !DumpVC 000007feed1ddff8 000000028036d890
Name: System.DateTime
MethodTable: 000007feed1ddff8
EEClass: 000007feecbed6b0
Size: 24(0x18) bytes
File: C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib. dll
Fields:
MT Field Offset Type VT Attr Value Name
000007feed1e1158 40000d6 0 System.UInt64 1 instance 5246421159766325152 dateData
如何将"5246421159766325152"解释为日期时间? 有没有办法从这个值创建一个日期时间来获取人类可读的版本?
!Psscor2.PrintDateTime OBJADD
R或!sosex.mdt System.DateTime DATAADDR
。
DateTime.FromBinary(5246421159766325152)
值位于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间,则可以调用采用 Int64 的 DateTime 的重载构造函数。
但是,您的特定值超出了此范围。如@Boo所述,您可以使用静态 DateTime.FromBinary 方法。
在这里,您可以找到一种使用脚本查看WinDBG本身的简单方法,然后可以像以下那样简单地运行它:
0:000> $$>a<e:ScriptsDumpDate.txt 0000003692816498
http://blogs.msdn.com/b/carlosag/archive/2014/10/23/how-to-display-a-datetime-in-windbg-using-sos.aspx
撕掉 UTC 标志并直接从 windbg 命令行以人类可读的格式打印(从结果中减去 1600 年)
!filetime 0n5246421159766325152 & 0x3fffffffffffffff
5/25/3612 09:12:13.893(未知)