У меня есть лист Excel с некоторыми данными. В нем у меня есть столбец даты. Когда я читаю лист Excel для столбца даты, он возвращает неверную дату (формат даты месяц/день/год).
Ниже приведен пример значения даты в листе Excel
01/01/2014
и это значение даты, считанное с С#:
1/1/2014
Но он правильно 05/24/2015
дату 05/24/2015
.
Поэтому, когда я TryParseExact
его в течение действительной даты, он всегда возвращает false. Есть ли хорошее решение для решения этой проблемы?
Обновить:
if (!DateTime.TryParseExact(row["ColoumnNo"].ToString(), "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date)) <br>
{
//code
}
Как намекнули некоторые другие, вам гораздо лучше избежать проблемы вообще, доверяя Excel, чтобы рассказать вам, есть ли дата или нет. Range.Value
имеет object
type и возвращает DateTime
если Excel распознает содержимое как дату. Таким образом, ваш код может быть написан как:
var value = row[".."].Value;
if (value is DateTime)
{
var date = (DateTime)value;
//code
}
Когда вы смотрите на свой лист Excel, вы видите следующий формат: MM/dd/yyyy. Ваша дата только отображается в этом формате с помощью форматирования в excel. Под капотом это тип даты. Когда вы читаете дату в виде строки в С#, вы получаете следующий формат от вашего типа даты M/d/yyyy. Поэтому вы должны изменить маску своего TryParse на: "M/d/yyyy". Вы можете лучше прочитать значение как дату из листа excel напрямую, если вы измените свою культуру, вы прочтете другой формат даты из своего excelsheet.