【问题标题】:.NET C# Read Excel file DateTime Column read 1 second less, why?.NET C# 读取 Excel 文件 DateTime 列读取时间少 1 秒,为什么?
【发布时间】:2012-03-06 13:22:12
【问题描述】:

我有一个 excel 文件,其中一列有 DateTime 值:

01.03.2012 10:00
02.03.2012 10:00
03.03.2012 10:00
04.03.2012 10:00

我正在阅读这段代码:

OleDbDataAdapter command = new OleDbDataAdapter("select * from [" + sheetName + "$]", Conn);
command.Fill(Result);

有趣的是,excel文件中的数据是这样的(第一列是正确的,但其他列少了1秒)

01.03.2012 10:00:00
02.03.2012 09:59:59
03.03.2012 09:59:59
04.03.2012 09:59:59

其余值将在 09:59:59... 只有第一个值正确进入数据表。

为什么我会遇到这个问题,知道如何完全按照 Excel 文件中的方式获取它们吗?

我非常感谢任何帮助。 提前致谢,

【问题讨论】:

    标签: .net excel datetime


    【解决方案1】:

    在您的 Excel 工作表中并不是真正的 10:00,因为 Excel 不保存该格式的时间:

    • 一秒保持为 1/(24*60*60) = 0.00001157407
    • 10:00:00 保持为 0.41666666667
    • 9:59:59 保留为 0.41665509259

    将您的时间复制到其他单元格并将它们格式化为带有七位或八位小数的数字。我的猜测是转换为 9:59:59 的值小于 0.41666666667,并且被截断而不是四舍五入。

    【讨论】:

      【解决方案2】:

      我怀疑您在 Excel 电子表格中实际上有 09:59:59,它是将时间“四舍五入”到 10:00 的显示格式。检查应用了哪些单元格格式。

      【讨论】:

      • 是的,这是我看到的唯一可能的解决方案。没遇到过这个问题
      • 我的 Excel 工作表中确实是 10:00,因为我复制到上面的问题中,而不是 09:59:59。事实上,在同一个 Excel 文件中,但在不同的工作表中,有 19:00,在 C# 上读取为 19:00:00。我再次检查了 10:00 确实是 10:00:00..
      猜你喜欢
      • 2014-02-19
      • 2018-08-28
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多