在阅读文件并在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];
答案 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并行读取时会有所不同。 试试吧。