将excel格式转换为C#TimeStamp,就像excel一样

本文关键字:excel 就像 一样 C#TimeStamp 格式 转换 | 更新日期: 2023-09-27 18:24:15

在我的应用程序中,我正在从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那样将其转换为时间。

将excel格式转换为C#TimeStamp,就像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格式,即使是天、月等。

如果没有提供任何代码,我将放弃"如何以正确的方式读取数据",转而关注"如何转换输出"。

可以这样工作:

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小时的日期起的天数加上你的时间
注意:我在这里省略了计算月份。因此,此代码的计算时间限制为一个月。如果你想输出更大的数字(超过约720小时),则必须将月份包括在计算中。

提供代码后编辑:
对不起,我以前没有使用过odbc连接。但关键是:你得到的是原始值,而不是计算值。我已经试过在谷歌上搜索了,但找不到太多结果。

也许其他人可以帮上忙。相反,我建议只是转换输出。

相关文章: