2011-01-25 112 views
10

我正在阅读使用C#和Microsoft.Office.Interop的Excel工作表数据。该工作表包含一些日期值。当我试图读取该值时,它只是给出数字(可能是TimeSpan)。我有问题将此号码转换为DateTime。将Timespan转换为C中的DateTime#

下面是代码:

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

哪里wsExcel.WorkSheet

任何人都可以解释我应该如何将这个数字(TimeSpan)转换为DateTime

感谢您分享宝贵的时间。

+1

它可以给你蜱其中DATATIME有一个构造器。 – rerun 2011-01-25 07:50:29

回答

9

你可以做以下

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

DateTime conv = DateTime.FromOADate(d); 
6

这一切都取决于数量的样子; P上通常在某个区间的偏移量,为一些时代 - 例如秒自1月1日1970年因此,尝试,例如:

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

和然后尝试AddMilliseconds(number),AddTicks(number)等,直到日期匹配。

+0

感谢Marc的快速回复。你能告诉我,如果我在2010年4月1日得到40269,我应该考虑什么。 – IrfanRaza 2011-01-25 07:54:08

+0

@IrfanRaza - 在这种情况下@Greco有答案; `var when = DateTime.FromOADate(40269);` – 2011-01-25 07:55:54

2

这仅仅是锦上添花:Excel中代表日期为OLE automation dates。这些值是浮点数,其整数部分是在1899年12月30日午夜之后的天数。或之前,如果是负数。希腊的答案给你转换:)

9

使用以下的最佳方式:

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