Получение исключения как «Строка не была распознана как действительный DateTime» в середине выполнения для 1 столбца, а не другого - PullRequest
0 голосов
/ 23 мая 2019

У меня более 500 строк с 25 столбцами.Из них datefrom & dateto точно такие же, и данные для обоих столбцов изменяются в таблице Excel в строке 18, где дата изменяется с 11-12-2018 на 11-13-2018.

Исключение выдается только для dateto столбца в строке 18, но не для datefrom в той же строке с теми же данными.Это делает меня более запутанным.

Я проверил формат даты в таблице Excel для обоих столбцов, но все еще исключение.

Строка не была распознана как действительный DateTime

if(excelfile.FileName.EndsWith("xls") || excelfile.FileName.EndsWith("xlsx"))
{
    string path = Server.MapPath("~/Content/" + excelfile.FileName);
    excelfile.SaveAs(path);

    //This Path is for Reading data from Excel Sheet
    Excel.Application application = new Excel.Application();
    Excel.Workbook workbook = application.Workbooks.Open(path);
    Excel.Worksheet worksheet = workbook.ActiveSheet;
    Excel.Range range = worksheet.UsedRange;
    List<Ratecard> listRatecard = new List<Ratecard>();

    conn = new SqlConnection(connstring);
    conn.Open();

    for(int row = 2; row <= range.Rows.Count; row++)
    {
        Ratecard p = new Ratecard();
        ...
        ...
        //To try getting data from Excel sheet to Date Time format in Database
        p.datefrom = DateTime.Parse(((Excel.Range)range.Cells[row, 17]).Text);   // Here the same data is there and no issues
        p.dateto = DateTime.Parse(((Excel.Range)range.Cells[row, 18]).Text);     // here the an exception of Incorrect data format is thrown when the date of Row no:19 changes from 11-12-2018 to 11-13-2019 
        ...
        ...
    }
    conn.Close();
}

1 Ответ

0 голосов
/ 25 мая 2019

Проблема:

Имеются две рассматриваемые даты:
11-12-2018
11-13-2018

Взгляд на обадаты (и зная, что это даты), я могу сказать, что формат даты - «ММ-дд-гггг».

Как система узнает об этом?Что такое 11?День или месяц?

Исходя из вашей культуры потоков, система использует (я полагаю) формат "dd-MM-yyyy".Благодаря этому ваш первый свидание правильно разбирается.Во вторую дату 13 не является допустимым значением для месяца;и, следовательно, ошибка.

Помимо ошибки, поймите, что ваши все даты анализируются неправильно , даже если они анализируются успешно.Дата и месяц меняются местами.

Решение:

Анализ строк в DateTime должен выполняться с осторожностью.
Вы не отправляете информацию о формате вВаш DateTime.Parse звонок.В этом случае он использует эту информацию из текущей культуры потоков.

Преобразует строковое представление даты и времени в эквивалент DateTime с использованием соглашений текущей культуры потоков.

Существует другая перегрузка того же метода, которая принимает IFormatProvider в качестве параметра.Эту перегрузку следует использовать, чтобы конкретно указать формат входной даты.

Преобразует строковое представление даты и времени в его эквивалент DateTime, используя информацию о формате для конкретной культуры.

Лучшей альтернативой является использование DateTime.ParseExact в этом случае.

DateTime dateTime = DateTime.ParseExact(inputStringDate, "MM-dd-yyyy", ...);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...