2016-03-08 2 views
-1

У меня есть этот код в контроллере. Этот код дает исключение, когда я пытаюсь выполнить цикл через DataSet. Исключение дается в разных строках, когда я запускаю (исключение не происходит в точном ряду)C# - исключение «String не было признано действительным DateTime»

Исключение составляет;

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

DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); 

я попытался это тоже;

DateTime createdDate = DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture); 

но это еще не работает ..

значение строки является 2/9/2016 21:20

+0

Какова ценность 'CheckInDate', которую вы передаете? Нам нужно будет это понять. Если это поле 'dateimte', вы можете использовать' DateTime' без синтаксического анализа. – Lloyd

+0

Я предполагаю, что строка не является допустимым временем даты ....?! – Liam

+0

@Lloyd Strings like 02.02.2009 21:20 .. –

ответ

4

Вы просто бросить его на правильный тип, который, кажется DateTime, нет необходимости разбирать :

DateTime arrDate = ds.Tables[0].Rows[i].Field<DateTime>("CheckInDate"); 

Если это на самом деле строка (почему это так?) использовать M/d/yyyy вместо MM/dd/yyyy:

DateTime.ParseExact("2/9/2016 21:20", "M/d/yyyy HH:mm", DateTimeFormatInfo.InvariantInfo); 
+0

ds.Tables [0] .Rows [i] ["CheckInDate"]. ToString() будет проходить 2/19/2016 21:20 типа строк –

+0

@ThilinaDeSilva: да, потому что 'ToString' возвращает строку, даже если она была' DateTime'. Вы использовали мой код? Что возвращает '.... Поле (« CheckInDate »)'? –

-1

Попробуйте ниже,

If (ds.Tables[0].Rows[i]["CheckInDate"] != null) { 
// your code goes here... 
DateTime arrDate = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); 
} 
+0

Я бы всегда использовал String.IsNullOrEmpty для проверки строк – StarterPack

+0

Ну. Автор этого вопроса не добавил этого. Поэтому я подумал, что может быть проблема проверки ничто. Это не является веской причиной для снижения этого ответа. –

1

ParseExact требует, чтобы ваша строка точно соответствует шаблону вы разборе против.

Ваш шаблон имеет «MM/dd», который требует двухзначных месяцев и дней («01/29» или «10/02» или «01/02»), но вы пропускаете только цифры и дни недели ("2/9").

Вам либо нужно изменить шаблон, чтобы принимать одиночные цифры, либо изменить строку для передачи двухзначных цифр.

0

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

DateTime dt=DateTime.ParseExact(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), "dd/MM/yyyy", CultureInfo.InvariantCulture); 

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

// for example language English and region Canada 
DateTime dt=DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString(), new CultureInfo("en-CA")); 

ИЛИ

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA"); 
DateTime dt = DateTime.Parse(ds.Tables[0].Rows[i]["CheckInDate"].ToString()); //uses the current Thread's culture 

Для получения дополнительной информации, ознакомьтесь с Custom Date and Time Format Strings

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