Интерпретировать uint64 dateData in.NET структура DateTime?

при просмотре структуры DateTime в отладчике через SOS.dll, я вижу...

  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" как DateTime? Есть ли способ создать DateTime из этого значения, чтобы получить читаемую человеком версию?

5 ответов


DateTime.FromBinary(5246421159766325152)

!Psscor2.PrintDateTime OBJADDили !sosex.mdt System.DateTime DATAADDR.


Если значение Int64 находится между DateTime.Параметр minvalue.Клещи и DateTime.Максвеллову.Клещей, то вы можете вызвать перегруженный конструктор для DateTime принимает значение типа int64.

ваше конкретное значение выходит за пределы этого диапазона. Как упоминалось в @Boo, вы можете использовать static DateTime.FromBinary метод.


здесь вы можете найти простой способ посмотреть на него 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


вырвать флаги UTC и распечатать его в удобочитаемом формате прямо из командной строки windbg (вычесть 1600 лет из результата)

!filetime 0n5246421159766325152 & 0x3fffffffffffffff

5/25/3612 09:12:13.893 (неизвестно)