gpt4 book ai didi

c# - 将 excel 中的时间格式列转换为 C# DateTime

转载 作者:太空狗 更新时间:2023-10-29 22:14:00 26 4
gpt4 key购买 nike

我目前正在使用 Excel C# 库 (Microsoft.Office.Interop.Excel) 将 Excel 电子表格读入我的 C# 应用程序。

我最初尝试读取所有单元格作为它们的原始数据,但发现日期格式的单元格给我一个 5 位整数,而时间格式的单元格返回一个小数。所以我后来发现您可以使用 Excel 的 C# 库中内置的日期转换方法,如下所示:

DateTime excelDate = (DateTime)ExcelCalcValue.ExcelDateToDateTime(workbook, Double.Parse(cell.Value.ToString()));
output = excelDate.ToString("yyyy-MM-dd HH:mm");

通过使用各种测试表调试我的应用程序,我已经能够记录单元格以不同方式格式化时返回的各种格式字符串。这些如下:

(WorksheetCell.CellFormat.FormatString)

Times

[$-F400]h:mm:ss\\ AM/PM
hh:mm:ss;@
h:mm:ss;@
[$-409]hh:mm:ss\\ AM/PM;@
[$-409]h:mm:ss\\ AM/PM;@

Dates

m/d/yy
[$-F800]dddd\\,\\ mmmm\\ dd\\,\\ yyyy
dd/mm/yyyy;@
dd/mm/yy;@
d/m/yy;@
d\\.m\\.yy;@
yyyy\\-mm\\-dd;@
[$-809]dd\\ mmmm\\ yyyy;@
[$-809]d\\ mmmm\\ yyyy;@

使用这些,我现在可以可靠地确定 excel 中单元格的格式样式。使用较早的代码,我可以检测日期格式的单元格并以 DateTime 格式返回正确的数据。但是,我看不到用于转换时间格式单元格的等效函数。

当我读取时间格式为 [$-F400]h:mm:ss\\AM/PM 的单元格时,我得到了 0.58368055555555554 的结果。我完全不知道如何将其转换为 DateTime,或者这个 float 代表什么。

谁能建议一种将时间格式的 Excel 单元格(存储为奇怪的 float )转换为正确的 DateTime 变量的方法?

最佳答案

正如 FrankPI 所说,使用 DateTime.FromOADate()。您可以将此函数与 Excel 单元格中的原始数据一起使用 - 无需解析格式。

Excel 将其日期和时间编码为 double 。整数部分表示 1900 年 1 月 1 日之后的天数。小数部分表示自引用日期午夜以来的时间。例如:

1.5 是 1900 年 1 月 1 日 @ 中午

41507.25 = 2013 年 8 月 21 日上午 6:00

有关此功能的更多信息,请参阅 MSDN 文档:

http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx

关于c# - 将 excel 中的时间格式列转换为 C# DateTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18358275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com