在C#中读取excel给了我一个未知的日期格式

时间:2014-04-17 09:04:55

标签: c# excel date-formatting

在阅读文件并在DataGridView中显示时,日期显示为数字

03/25/2014 00:00是41723

03/25/2014 01:00是41723,041667

这是什么格式,如何找到它所代表的日期/月/年/小时?

string src = "the path";
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + src +
                                                    "Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\"");

OleDbDataAdapter da = new OleDbDataAdapter("select * from [RENNES4_wk13$]", con);

da.Fill(dataSet);
dataGridView1.DataSource = dataSet.Tables[0];

2 个答案:

答案 0 :(得分:2)

您可以通过以下方式将号码转换为DateTime

//  cell as number (days since 1.1.1900 00:00)
double x = double.Parse(v);
DateTime d = DateTime.Parse("01.01.1900 00:00");
d = d.AddDays(Math.Floor(x) - 2);   //  had to subtract 2 to get it right. Why?
d = d.AddMinutes((x - Math.Floor(x)) * 24 * 60);

数字的整数部分为您提供01-Jan-1900后的天数。 时间是一天的一小部分。

在您的示例中,一小时是一天的1/24:0.041667

答案 1 :(得分:1)

我遇到了同样的问题,这里有一个提示...... 在使用OLEDB打开文件之前,从任何正在运行的线程中释放excel文件,或者如果已使用excel服务打开它。 我了解到excel输出格式,对于像date这样的字段(在自定义类型的情况下),当它们已经在excel服务中打开并且使用OLEDB并行读取时会有所不同。 试试吧。