2012-05-25 8 views
7

Al analizar una estructura DateTime en el depurador a través Sos.dll, veo ...¿Interpretar UInt64 dateData en la estructura .NET 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 

¿Cómo se puede interpretar "5246421159766325152" como valor DateTime? ¿Existe alguna manera de crear un DateTime a partir de este valor para obtener la versión legible para los humanos?

Respuesta

6
DateTime.FromBinary(5246421159766325152) 
+2

lo hago tan a menudo utilizo una PowerShell de una sola línea para obtener una respuesta rápida: '[System.DateTime] :: FromBinary (5246421159766325152)' –

+1

Tenga en cuenta que el valor DateTime es un UInt64 (ulong). 'DateTime.FromBinary' toma un Int64 (largo). Esto significa que puede obtener un valor que no funciona directamente con DateTime.FromBinary. Vi este valor en un basurero: 9859146799984130527 –

1

Si el valor de Int64 está entre DateTime.MinValue .Ticks y DateTime.MaxValue .Ticks, a continuación, puede llamar al constructor sobrecargado para un DateTime tomando un Int64.

Su valor particular queda fuera de este rango. Como se mencionó en @Boo, puede usar el método estático DateTime.FromBinary.

9

R !Psscor2.PrintDateTime OBJADD o !sosex.mdt System.DateTime DATAADDR.

0

arrancar las banderas UTC e imprimirlo en formato legible por humanos directamente desde la línea de comandos windbg (1600 restar años a partir de resultado)

!filetime 0n5246421159766325152 & 0x3fffffffffffffff 

5/25/3612 09: 12: 13.893 (desconocido)

Cuestiones relacionadas