Дата неверно возвращается из листа Excel

1

У меня есть лист 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
}
  • 0
    Базовое значение DateTime от 01.01.2014 совпадает с 01.01.2014; кажется, это просто вопрос формата. С уважением,
  • 0
    DateTime.TryParseExact (row ["ColoumnNo"]. ToString (), "MM / dd / yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out data); Я дал так @AlexBell. Но он возвращает ложь за вышеуказанную дату.
Показать ещё 8 комментариев
Теги:
excel
date
c#-4.0

2 ответа

0

Как намекнули некоторые другие, вам гораздо лучше избежать проблемы вообще, доверяя Excel, чтобы рассказать вам, есть ли дата или нет. Range.Value имеет object type и возвращает DateTime если Excel распознает содержимое как дату. Таким образом, ваш код может быть написан как:

var value = row[".."].Value;

if (value is DateTime)
{
    var date = (DateTime)value;
    //code
}
0

Когда вы смотрите на свой лист Excel, вы видите следующий формат: MM/dd/yyyy. Ваша дата только отображается в этом формате с помощью форматирования в excel. Под капотом это тип даты. Когда вы читаете дату в виде строки в С#, вы получаете следующий формат от вашего типа даты M/d/yyyy. Поэтому вы должны изменить маску своего TryParse на: "M/d/yyyy". Вы можете лучше прочитать значение как дату из листа excel напрямую, если вы измените свою культуру, вы прочтете другой формат даты из своего excelsheet.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню