2011-01-25 69 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))