Как проверить, находится ли Дата, проанализированная из Excel, в обычном формате (например, 01.01.2009) или в формате Дата ОА? - PullRequest
1 голос
/ 08 ноября 2019

Я использую OpenXml, чтобы заполнить свою базу данных значениями. Одна из моих общих функций преобразует value (строку) каждой ячейки в правильный тип:

convertedValue = Convert.ChangeType(value, realType);

Все работает нормально, если только не дата. Иногда OpenXml читает ячейку с датой так: 01/01/2019, и преобразование работает нормально. Иногда он конвертируется в число вроде этого: 43466. Я знаю, что это число показывает, сколько дней прошло с 1900 года, но оно нарушает мою функцию. Он не может преобразовать это число в DateTime.

Я хочу добавить преобразование для OA Dates, например:

convertedValue = DateTime.FromOADate(doubleValue);

Проблема заключается в том, как проверить, что значение прочитаноиз ячейки есть OA Date?

Я думал проверить длину переменной value и убедиться, что все символы являются числами. Есть ли лучший способ решить эту проблему?

1 Ответ

1 голос
/ 08 ноября 2019

Используйте TryParseExact, чтобы определить формат. Если он не анализируется точно в указанном формате, он вернет false. Тогда мы знаем, что мы можем использовать FromOADate метод из DateTime

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