在C#中将Timespan转换为DateTime

时间:2011-01-25 07:47:22

标签: c# datetime excel-interop ole-automation

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

以下是代码:

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

wsExcel.WorkSheet

有人可以解释我该如何将这个号码(TimeSpan)转换为DateTime

感谢您分享宝贵的时间。

4 个答案:

答案 0 :(得分:9)

您可以执行以下操作

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

DateTime conv = DateTime.FromOADate(d);

答案 1 :(得分:9)

使用以下内容:

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

答案 2 :(得分:6)

这一切都取决于数字的含义; p通常是某个时间间隔内的偏移量,进入某个时期 - 例如1970年1月1日以来的秒数。所以试试,例如:

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

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

答案 3 :(得分:2)

这只是结冰:Excel将日期表示为OLE automation dates。这些值是浮点数,其整数部分是1899年12月30日午夜之后的天数。或之前,如果它是负数。 Greco的答案为您提供了转换的最佳方式:)