9

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

4

5 回答 5

9

!Psscor2.PrintDateTime OBJADDR 或!sosex.mdt System.DateTime DATAADDR.

于 2012-05-25T18:19:29.497 回答
7
DateTime.FromBinary(5246421159766325152)
于 2012-05-25T18:07:41.070 回答
1

如果 Int64 值介于DateTime.MinValue .Ticks 和DateTime.MaxValue .Ticks 之间,则可以调用采用 Int64的DateTime的重载构造函数。

但是,您的特定值超出了此范围。正如@Boo 提到的,您可以使用静态DateTime.FromBinary方法。

于 2012-05-25T18:07:35.673 回答
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

于 2015-05-07T18:25:31.557 回答
0

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

!filetime 0n5246421159766325152 & 0x3fffffffffffffff

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

于 2015-05-08T07:20:21.637 回答