2015-12-18 3 views
0

Я пытаюсь даты первенствует чтения с помощью кодаDatetime синтаксического анализа не работает с #

String ss = (String)w.Cells[2 + i, 4].Value2; 
dRow[3] = DateTime.Parse(ss); 

код работает, когда ss = "12/11/2015" но дает ошибку

Строка не была признана в качестве действительного DateTime

, когда ss = "13/11/2015"

Он дает ошибку, потому что месяц не может быть 12, но он принимает дату как месяц. Вот что я думаю. Тот же код работает на другом ПК. Нужно ли мне проверять формат даты или что-то вроде настройки даты.

+0

возможно, потому что нет 13-го месяца в году ...? – holex

ответ

4

DateTime.Parse использует стандартный формат даты и времени ваших настроек CurrentCultureпо умолчанию.

Похоже, ваш CurrentCulture имеет формат MM/dd/yyyy как короткий формат даты и поскольку нет месяца, как 13 в григорианском календаре (который, вероятно, использует в качестве Calendar для CurrentCulture), вы получите FormatExcetion.

Вы можете использовать DateTime.ParseExact, чтобы указать свой формат точно так же;

dRow[3] = DateTime.ParseExact("13/11/2015", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Если вы получаете это в качестве входных данных, и вы хотите, чтобы разобрать его DateTime, вы должны знать, какой формат имеет. Помимо этого, он может создавать неоднозначные сценарии.

Например, что 01/02/2015 следует разобрать как? 1 февраля или 2 января?

Вы не принимаете Предположите, что каждая строка, которую вы поставили, отлично разбирается в методе DateTime.Parse. Это не , что умный.

Смежные вопросы