2012-05-25 15 views
7

In guardando una struct DateTime nel debugger via Sos.dll, vedo ...Interpretazione di date date UInt64 nella struttura .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 

Come può interpretare "5246421159766325152" come DateTime? C'è un modo per creare un DateTime da questo valore per ottenere la versione leggibile?

risposta

6
DateTime.FromBinary(5246421159766325152) 
+2

Faccio questo così spesso io uso un one-liner PowerShell per ottenere una risposta rapida: '[System.DateTime] :: FromBinary (5246421159766325152)' –

+1

Si noti che il valore DateTime è un UInt64 (ulong). 'DateTime.FromBinary' prende un Int64 (lungo). Ciò significa che puoi ottenere un valore che non funziona direttamente con DateTime.FromBinary. Ho visto questo valore in una discarica: 9859146799984130527 –

1

Se il valore Int64 è tra DateTime.MinValue .Ticks e DateTime.MaxValue .Ticks, è possibile chiamare il costruttore sovraccarico per un DateTime prendendo un Int64.

Tuttavia, il tuo valore particolare non rientra in questo intervallo. Come menzionato @Boo, puoi utilizzare il metodo statico DateTime.FromBinary.

9

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

0

strappiamo le bandiere UTC e stamparlo in formato leggibile direttamente dalla riga di comando WinDbg (sottrai 1600 anni dal risultato)

!filetime 0n5246421159766325152 & 0x3fffffffffffffff 

5/25/3612 09: 12: 13,893 (sconosciuto)