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

How to check whether a Date parsed from Excel is in normal format (e.g. 01/01/2019) or in OA Date format?

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

convertedValue = Convert.ChangeType(value, realType);

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

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

convertedValue = DateTime.FromOADate(doubleValue);

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

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

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

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