在.NET DateTime结构中解释UInt64 dateData?

时间:2012-05-25 18:02:25

标签: .net datetime windbg sos

通过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来获得人类可读的版本?

5 个答案:

答案 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 

http://blogs.msdn.com/b/carlosag/archive/2014/10/23/how-to-display-a-datetime-in-windbg-using-sos.aspx

答案 4 :(得分:0)

撕掉UTC标志并直接从windbg命令行以人类可读的格式打印(从结果中减去1600年)

!filetime 0n5246421159766325152 & 0x3fffffffffffffff

5/25/3612 09:12:13.893(未知)