2014-11-18 4 views
-2

Я пытаюсь заказать следующий список:ParseExact не работает с датой и временем

List<string> list = new List<string>(); 
list.Add("2014-07-30 22:01:00blablabla"); 
list.Add("2014-07-30 22:00:00blalalalalal"); 
list.Add("2014-07-29 22:01:00bblala"); 

var orderedList = list 
        .OrderByDescending(x => DateTime.ParseExact(x.Substring(0,19) 
                  , "dd-MM-yyyy HH:mm:ss" 
                  , CultureInfo.InvariantCulture 
                  ) 
            ) 
        .ToList(); 

Это возвращает исключение:

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

Я не понимаю, почему.

+1

Существует подстрока .... – Slrg

ответ

2

От documentation

Преобразует заданное строковое представление даты и времени ее DateTime эквивалент. Формат строкового представления должен точно соответствовать определенному формату или генерируется исключение.

Ваша строка и форматы должны соответствовать точно. Ваши детали даты и времени даже не соответствуют формату dd-MM-yyyy HH:mm:ss. Вместо этого вам нужно использовать yyyy-MM-dd HH:mm:ss.

var orderedList = list.OrderByDescending(x => DateTime.ParseExact(x.Substring(0, 19), 
             "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture)). 
             ToList(); 
5

Ваш формат даты неверен. Данные находятся в формате yyyy-MM-dd, а ваша строка описывает dd-MM-yyyy.

Это работает:

var orderedList = list.OrderByDescending 
        (x => DateTime.ParseExact 
         (x.Substring(0, 19) 
         , "yyyy-MM-dd HH:mm:ss" 
         , CultureInfo.InvariantCulture 
         ) 
       ) 
        .ToList(); 
2

Строка 2014-07-30 22:01:00 не соответствует строке формата dd-MM-yyyy HH:mm:ss.

Попробуйте вместо yyyy-MM-dd HH:mm:ss.

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