2011-01-25 2 views
10

Я читаю данные таблицы Excel с помощью C# и Microsoft.Office.Interop. Лист содержит некоторые значения даты. Когда я пытаюсь прочитать это значение, он просто дает число (возможно, TimeSpan). У меня проблема с преобразованием этого числа в DateTime.Преобразование временного интервала в DateTime в C#

Ниже приведен код:

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

Где ws является Excel.WorkSheet.

Может кто-нибудь объяснить, как мне преобразовать это число (TimeSpan) в DateTime?

Спасибо, что поделились своим ценным временем.

+1

Это может быть дает вам клещей, которые datatime имеет застройщик для. – rerun

ответ

9

Вы можете сделать следующее

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

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

Проверено с использованием тестовых данных OP 40269 = 1 апреля 2010: 'var when = DateTime.FromOADate (40269);' –

+0

Спасибо Greco! Ваше решение верно. – IrfanRaza

+0

Греко - вы меняли свое имя? Я буду обновлять свой ответ, если да :) –

6

Все зависит от того, что число выглядит, р, что, как правило, смещение в некотором интервале, в какой-то эпохи - например, секунд с 1 января 1970 года Так что попробуйте, например:

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

и затем попробуйте AddMilliseconds(number), AddTicks(number) и т. д. до даты совпадает.

+0

Спасибо Marc за ваш быстрый ответ. Не могли бы вы рассказать мне, что я должен рассмотреть, если я получаю 40269 за апрель/1/2010. – IrfanRaza

+0

@ IrfanRaza - в этом случае @Greco имеет ответ; 'var when = DateTime.FromOADate (40269);' –

2

Это просто глазурь: Excel представляет даты как OLE automation dates. Эти значения являются числами с плавающей запятой, целой частью которых является число дней после полуночи, 30 декабря 1899 года. Или раньше, если это отрицательно. Ответ Греко дает вам лучший способ конвертировать :)

9

Используйте следующее:

DateTime dt = new DateTime().Add(TimeSpan.FromMilliseconds(1304686771794)) 
Смежные вопросы