2011-01-25 12 views
10

Sto leggendo i dati del foglio di lavoro Excel utilizzando C# e Microsoft.Office.Interop. Il foglio contiene alcuni valori di data. Quando sto provando a leggere quel valore, sto solo dando il numero (probabilmente TimeSpan). Sto avendo problemi a convertire questo numero in DateTime.Conversione del tempo in DateTempo in C#

Di seguito si riporta il codice:

TimeSpan ts = TimeSpan.Parse(((Range)ws.Cells[4, 1]).Value2.ToString()); 

Dove ws è Excel.WorkSheet.

Qualcuno può spiegare come devo convertire questo numero (TimeSpan) in DateTime?

Grazie per aver condiviso il vostro tempo prezioso.

+1

Potrebbe essere ti dà le zecche, che la DataTime ha un contructor per. – rerun

risposta

9

Si potrebbe fare la seguente

double d = double.Parse(((Range)ws.Cells[4, 1]).Value2.ToString()); 

DateTime conv = DateTime.FromOADate(d); 
+0

Verificato con i dati di test dell'OP di 40269 = 1 ° aprile 2010: 'var when = DateTime.FromOADate (40269);' –

+0

Grazie Greco! La tua soluzione è corretta. – IrfanRaza

+0

Greco - hai cambiato il tuo nome? Aggiornerò la mia risposta in caso affermativo :) –

6

tutto dipende da ciò che il numero sembra; p che è in genere l'offset in un certo intervallo, in qualche epoca - per esempio i secondi dal 1 gennaio 1970. Quindi, cercare, ad esempio:

var when = new DateTime(1970,1,1).AddSeconds(number); 

e quindi prova AddMilliseconds(number), AddTicks(number) ecc. fino a quando la data coincide.

+0

Grazie Marc per la tua risposta veloce. Puoi dirmi per favore cosa devo considerare se ottengo 40269 per l'Apr/1/2010. – IrfanRaza

+0

@IrfanRaza - in questo caso @Greco ha la risposta; 'var when = DateTime.FromOADate (40269);' –

2

Questa è solo la ciliegina: Excel rappresenta date come OLE automation dates. Questi valori sono numeri in virgola mobile, la cui parte intera è il numero di giorni dopo la mezzanotte, il 30 dicembre 1899. O prima, se è negativo. La risposta di Greco vi offre il modo migliore per convertire :)

9

Usa la seguente:

DateTime dt = new DateTime().Add(TimeSpan.FromMilliseconds(1304686771794))