Conversione da millisecondi al formato DateTime

Ho una stringa che è rappresentativa in questo modo:

string startdatetime = "13988110600000" 

Quello che voglio fare è convertire questa stringa (che sono millisecondi) in una variabile DateTime. Questo è quello che sto facendo:

 double ticks = double.Parse(startdatetime); TimeSpan time = TimeSpan.FromMilliseconds(ticks); DateTime startdate = new DateTime(time.Ticks); 

Il risultato è quasi buono: ho una data strana ma il tempo va bene (30/04/0045 18:00:00).

C’è qualche ragione per questo?

DateTime in .NET è inizializzato su 0001-01-01 00:00:00 e quindi aggiungi TimeSpan , che sembra essere di 45 anni.

È comune che definizioni di questo tipo (milli) -seconda volta inizi alle 1970-01-01 00:00:00 , quindi forse il seguente ti dà il risultato atteso:

 double ticks = double.Parse(startdatetime); TimeSpan time = TimeSpan.FromMilliseconds(ticks); DateTime startdate = new DateTime(1970, 1, 1) + time; 

o semplicemente

 var date = (new DateTime(1970, 1, 1)).AddMilliseconds(double.Parse(startdatetime)); 

Poiché la proprietà TimeSpan.Ticks restituisce a long , il new DateTime(time.Ticks) codice new DateTime(time.Ticks) chiama il costruttore DateTime(long) e dalla sua documentazione;

Una data e un’ora espresse nel numero di intervalli di 100 nanosecondi che sono trascorsi dal 1 gennaio 0001 alle 00: 00: 00.000 nel calendario gregoriano .

Ecco perché è sbagliato dire che il risultato è quasi buono . Il valore del risultato è atteso come implementato e documentato.

Il motivo è che il valore è basato sui millisecondi trascorsi dal 01/01/1900 o 01/01/1970 e DateTime in C # inizia con 01/01/00001 .

Penso che inizi dal 01/01/1970 perché 1970 + 45 sarebbe il 2015, penso che sia l’anno in cui cerchi.