Member 14760154 Ответов: 1

Eppplus считывает неверный формат даты из excel


У меня есть проблема с моим проектом ,речь идет о кадровой информационной системе
он имеет функцию загрузки расписания с помощью файла excel ,но в моем приложении
формат даты должен быть таким
11/30/2019
Месяц/Дата/Год

но в некоторых случаях пользователь вводит данные в неправильном формате ,
например, вот так
30/30/2019
Дата/Месяц/Формат


поэтому мне нужна проверка, я даю сообщение для пользователя, если дата имеет недопустимый формат


сообщение вроде этого
Error Line Description
    Line 2 43783   Incorret Format


я просто застреваю и ошибка в условии ввода пользователем правильного формата но система все равно проверяет его как неправильный формат

Что я уже пробовал:

Как я могу решить эту проблему

это мой код.

if (DateTime.TryParseExact(schedule_date, "MM-dd-yyyy", new CultureInfo("en-US"), DateTimeStyles.None, out d))                                                    
{count += 0;
 string labelmonth = ddlTest.SelectedValue.ToString()
 string employee_id = worksheet.Cells[i, 1].Value.ToString();
 string user = Session["LogedUserID"].ToString();
 bool validatemonth = ddlTest.SelectedValue.ToString() == 
 DateTime.Parse(worksheet.Cells[i, 3].Value.ToString()).ToString("MM");
 if (validatemonth.Equals(false))
 { count += 1;
  cell1.Text = "Pada Baris ke " + i + "  ";// +employee_id + " " + schedule_date;//" "  
 + Convert.ToDateTime(schedule_date).ToString("MM/dd/yyyy");//+ " Baris ke " + i + "Bulan Tidak Sesuai";
 cell2.Text = "Bulan Tidak Sesuai ";
 row.Cells.Add(cell1);
 row.Cells.Add(cell2);
 mytable.Rows.Add(row);
 }
 }
  else
 {
count += 1;
cell1.Text = "Pada baris Ke " + i + " " + Convert.ToString(schedule_date);//.ToString("MM/dd/yyyy");
cell2.Text = "Format Tanggal Salah";
row.Cells.Add(cell1);
row.Cells.Add(cell2);
mytable.Rows.Add(row);
}
}

PIEBALDconsult

При обмене данными следует настаивать на совместимых с ISO 8601 форматах.
И никогда не используйте строки для дат в приложении.

1 Ответов

Рейтинг:
1

OriginalGriff

Проблема в том, что вы не можете сказать: "01-02-03" - это 1 февраля 2003 года, 2 января 2003 года или 3 февраля 2001 года? Все они действительны: европейский формат, американский формат, формат ISO (своего рода - ISO должен быть четырехзначным годом, но есть системы, которые дают меньше.)

И как только у вас есть дата в виде строкового значения, нет абсолютно никакого способа сказать. Да, если дата 01-30-99, то это очевидно, но если она на самом деле не проходит базовую проверку - а менее 2/3 дат действительно терпят неудачу - нет никакого способа сказать, какое значение ожидал пользователь.

Единственный способ сделать это-вернуться к своей электронной таблице и посмотреть, находится ли информация о дате в строке или (что более вероятно) столбце даты Excel, и получить ее как значение DateTime непосредственно, если это так, а не преобразовывать ее в строку при извлечении.

Если это строка, вы набиты: вы не можете сказать, на основе ввода за записью, хотя, если Вам повезет, вы можете сказать, являются ли значения согласованными и не проходят некоторые проверки.