在 .NET 日期时间结构中解释 UInt64 日期数据



通过 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)
如果 Int64

值位于 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(未知)

最新更新