簡體   English   中英

像excel一樣將excel格式轉換為C#時間戳

[英]Convert excel format to C# TimeStamp like excel do so

在我的應用程序中,我從Excel工作表中讀取一些數據,當我想從單元格獲取時間戳時,我陷入了困境。 在這個特殊的單元格中,我得到的值為'1900-01-02 13:20:04',而在excel中,我使用的格式為[[h]:mm:ss',該值的格式為'61:20:04',即是正確的,因為這些單元格顯示出某些員工的工作時間。 我要實現的是以與excel('61:20:04')相同的格式從excel讀取此數據,並將其保存到字符串中。 我的問題是如何讀取此內容或將其轉換為此時間戳值?

編輯。(我現在的方式)

我正在使用ODBC從excel中讀取代碼,因此只需選擇我需要的數據(如sQl select)->將所有數據添加到數據表中,然后我就在做

dr [“ workedHours”]。ToString()-(dr =我的DataTable.Rows中的DataRow)此行返回“ 1900-01-02 13:20:04”。 我如何像excel一樣將其轉換為時間。

一些概念證明:

var timeStamp = "1900-01-02 13:20:04";
var date = DateTime.Parse(timeStamp);
var stamp = date.Subtract(new DateTime(1900, 1, 1));
var result = string.Format("{0}:{1:00}:{2:00}", 24 + stamp.Days * 24 + stamp.Hours, stamp.Minutes, stamp.Seconds);

出於某種原因,Excel從1900年1月0日開始使用時間戳記,這就是為什么我將24小時的結果相加。

我以為你總是想要格式hh:mm:ss,即使是幾天,一個月等等。

如果沒有提供任何代碼,Ill將放棄“如何以正確的方式讀取數據”,而轉向“如何轉換輸出”。

可以這樣工作:

string[] stampParts = output.ToString().Split(' ');
string[] dateParts = stampParts[0].Split('-');
string[] timeParts = stampParts[1].Split(':');

var result = new TimeSpan(((Convert.ToInt32(dateParts[2])-1)*24) + Convert.ToInt32(timeParts[0]), Convert.ToInt32(timeParts[1]), Convert.ToInt32(timeParts[2]));

這會將從24小時的日期算起的天數加1。
注意:我沒有在這里計算月份。 因此,此代碼最多只能計算一個月。 如果要輸出更大的數字(超過720小時),則必須將月份包括在計算中。

提供代碼后進行編輯:
抱歉,我以前曾使用過odbc-connections。 但關鍵是:您將獲得原始值,而不是計算出的原始值。 我已經嘗試過使用Google搜索,但是找不到很多結果。

也許其他人可以幫忙。 相反,我建議只轉換輸出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM