繁体   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