У меня есть куча строк с датами в ячейках, которые я извлекаю, например:
Нет, вы не делаете.У вас есть смесь строк, которые выглядят как даты и даты, которые выглядят как строки .Это проблема Excel, а не проблема C #.
Не уверен, что вы создаете электронную таблицу или получаете ее откуда-то еще.Но проблема в том, что Excel пытается разобрать текст , как он введен в ячейку .В этом случае он принимает неправильные решения в отношении дат, которые он находит.
Если вы введете дату, например «03/05/2011», Excel (неправильно) проанализирует ее как 5 марта 2011 г., исохранить это как числовой код даты (40607).Затем он применяет к ячейке форматирование даты (на моей машине он использует m / d / yyyy).
Если вы введете дату, например «31/05/2011», Excel не сможет проанализировать ее как дату и сохранит ее в виде текста.
Чтобы доказать это, выберите ячейкии перейдите в «Правка»> «Очистить»> «Форматы».Все «плохие даты» будут отображаться в виде чисел, все остальные будут выглядеть как даты.
У вас есть несколько вариантов:
- Исправьте данные перед их вводом в Excel(добавьте все к ', чтобы все вводилось как текст, или убедитесь, что электронную таблицу создали на компьютере с правильными настройками даты.)
- Не используйте
.Value.ToString()
из Excel, просто используйте.Text
.Это позволит игнорировать неправильный синтаксический анализ, который выполнял Excel, и должен дать вам согласованное текстовое значение (из обоих типов), которое вы можете ParseExact
с C # для других ответов.
(2)намного проще, и если электронные таблицы уже существуют, может быть, ваш единственный выбор.