2011-01-25 10 views
10

Czytam dane arkusza programu Excel przy użyciu C# i Microsoft.Office.Interop. Arkusz zawiera niektóre wartości dat. Kiedy próbuję odczytać tę wartość, podaję tylko numer (prawdopodobnie TimeSpan). Mam problem z konwersją tej liczby na DateTime.Konwersja czasu do DateTime w C#

Poniżej znajduje się kod:

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

Gdzie ws jest Excel.WorkSheet.

Czy ktoś może wyjaśnić, w jaki sposób należy przekonwertować ten numer (TimeSpan) na DateTime?

Dziękujemy za udostępnienie cennego czasu.

+1

To może być dając Ci kleszcze których DATATIME ma contructor dla. – rerun

Odpowiedz

9

Można wykonać następujące

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

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

Zweryfikowane z danymi testu PO z 40269 = 1 kwietnia 2010: 'var when = DateTime.FromOADate (40269);' –

+0

Dzięki Greco! Twoje rozwiązanie jest poprawne. – IrfanRaza

+0

Greco - czy zmieniłeś swoje imię? Zaktualizuję moją odpowiedź, jeśli tak :) –

6

Wszystko zależy od tego, co liczba wygląda; p To jest typowo przesunięte w pewnym przedziale, do jakiejś epoki - na przykład sekund od 1 sty 1970. Więc spróbuj, na przykład:

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

i następnie spróbuj AddMilliseconds(number), AddTicks(number) itd., aż data się zgadza.

+0

Dziękuję Marc za szybką odpowiedź. Czy możesz mi powiedzieć, co powinienem rozważyć, jeśli otrzymam 40269 za kwiecień/1/2010. – IrfanRaza

+0

@IrfanRaza - w takim przypadku @Greco ma odpowiedź; 'var when = DateTime.FromOADate (40269);' –

2

To jest tylko wisienką: Excel reprezentuje daty jako OLE automation dates. Te wartości są liczbami zmiennoprzecinkowymi, których całkowitą częścią jest liczba dni po północy, 30 grudnia 1899 roku. Lub wcześniej, jeśli jest ujemna. Odpowiedź Greco daje najlepszy sposób na konwersję :)

9

użyć następujących:

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