首页 > 解决方案 > 如何检查从 Excel 解析的日期是正常格式(例如 01/01/2019)还是 OA 日期格式?

问题描述

我用OpenXml值填充我的数据库。我的一个通用函数将每个单元格的value(字符串)转换为适当的类型:

convertedValue = Convert.ChangeType(value, realType);

除非是约会,否则一切正常。有时OpenXml会像这样读取日期单元格:01/01/2019并且转换工作正常。有时它会转换为这样的数字:43466. 我知道这个数字代表自 1900 年以来经过了多少天,但它破坏了我的功能。它无法将此数字转换为DateTime.

我想为OA Dates这样添加一个转换:

convertedValue = DateTime.FromOADate(doubleValue);

问题是如何检查从单元格中读取的值是否为OA Date

我正在考虑检查变量的长度value并验证所有字符都是数字。有没有更好的方法来解决这个问题?

标签: c#excelopenxml

解决方案


使用 TryParseExact 确定格式。如果它没有完全按照提供的格式解析,它将返回 false。然后我们知道我们可以使用FromOADateDateTime 中的方法

if(DateTime.TryParseExact(valueString, "mm/dd/yyyy", enUs, DateTimeStyles.None, out dateTime))
{
    // Handle standard date format
}

推荐阅读