Разобрать столбец DateTime из datatable, что плохо - PullRequest
0 голосов
/ 02 апреля 2020

Я преобразовал очень большой файл CSV в таблицу данных, и теперь я анализирую каждый столбец. Я столкнулся с проблемой, когда данные в указанном столбце c неверны. Предполагается, что это дата, ie 19.01.2020, но у нее 1/1/0101, поэтому она разбивает мою попытку разбора. То, что я пытаюсь сделать, - это удалить строки в таблице, прежде чем записать ее обратно.

DateTime checkDate = new DateTime(2018, 01, 01, 0, 0, 0);
for(int i = dt.Rows.Count-1; i >= 0; i--)
{
    DataRow row = dt.Rows[i];
    DateTime AccountInformationDate = DateTime.Parse(row["AccountInformationDate"].ToString());

    if (DateTime.Compare(checkDate, AccountInformationDate) > 0)
    {
         row.Delete();
         counter_skipped++;
     }
}
dt.AcceptChanges();

Я получаю исключение, когда он пытается проанализировать дату.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2020

Используйте DateTime.TryParse для проверки правильности ввода. Это решение предполагает, что вы хотите сохранить только строки с допустимым значением DateTime, которое позже, чем checkDate; отрегулируйте его по мере необходимости.

DateTime checkDate = new DateTime(2018, 01, 01, 0, 0, 0);
for(int i = dt.Rows.Count-1; i >= 0; i--)
{
    DataRow row = dt.Rows[i];
    DateTime AccountInformationDate;
    bool dateIsValid = DateTime.TryParse(row["AccountInformationDate"].ToString(), out AccountInformationDate);

    if (!dateIsValid || (dateIsValid && DateTime.Compare(checkDate, AccountInformationDate) > 0))
    {
         row.Delete();
         counter_skipped++;
     }
}
dt.AcceptChanges();
1 голос
/ 02 апреля 2020

Вы можете использовать DateTime.TryParse, чтобы проверить правильность строки даты.

...