2012-07-04 3 views
0

У меня есть список дат, как показано ниже
Min Дата и дата Макс

List<string> nameList = new List<string>(); 
nameList.Add("20120618PM"); 
nameList.Add("20120622PM"); 
nameList.Add("20120622AM"); 
nameList.Add("20120628PM"); 
nameList.Add("20120702PM"); 
nameList.Add("20120629AM"); 
nameList.Add("20120629PM"); 

Я хочу найти MaxDate и MIN DATE из списка .Please дайте мне знать, как я могу продолжить.

С уважением,
ЧАННА

+4

У вас есть список строк, ваша первая проблема конвертирует их в даты. Кажется, что они датируются с еще одним отличием утром или днем. Если вы можете определить, как разбирать строки «DateTimes», то это тривиальная проблема. Я вижу несколько логических возможностей. – Jodrell

+1

Просто используйте лучший тип данных для даты, чем строку, и это должно быть легко. –

+3

Какой формат? это ГГГГММДД или Год со временем? – Habib

ответ

4

Если формат даты YYyyMmDd тогда сортируемая как строки, даже с AM/PM

nameList.Max() 

Если у вас есть год плюс часы/минуты и AM/PM, то вы должны проанализировать т o DateTime. Я рекомендую разбираться независимо, как это предлагается в других ответах.

+0

Правда. Добавлено примечание об этом. (требуется 24 часа, а не am/pm). На стороне примечания Должны быть запрещены не сортируемые форматы даты;) –

+0

На самом деле, я думаю, что это сортируется, так как это yyyyMMdd, поэтому AM приходит до PM на любую заданную дату. Так что моя оригинальная формулировка действительно имеет место. –

+0

Ну, реалистично наш кодер должен использовать 'DateTime'! –

2
// 1. Convert your string list to datetimes 
IEnumerable<DateTime> dates = nameList.Select(m => DateTime.Parse(m, yourFormatProvider)); 

// 2. Get first and last date 
DateTime maxDate = dates.Max(); 
DateTime minDate = dates.Min(); 
+0

Не думаю, что вы можете 'Union'' DateTime' с другим 'DateTime'. – Rawling

+0

@ Rawling Я сожалею, что вы правы. Я должен был поститься, я изменил его.Спасибо, – hwcverwe

+0

Зачем создавать новый 'List':' new [] {date.Max(), date.Min()} 'лучше? или, еще лучше - 'var min = date.Min(); var max = date.Max(); 'Также возникает вопрос о разборе строк - DateTime.Parse не будет анализировать эти строки. 'ParseExact' лучше. –

6

Какой формат является то, что? "yyyyMMddtt"?

Существует AM PM с датой. Нет времени сопровождать AM/PM. Таким образом, я предполагаю, что AM 00:00:00 и Рм 12:00:00

Сначала исправьте ваш формат затем использовать этот

List<DateTime> temp = nameList.Select(x => 
DateTime.ParseExact(x, "yyyyMMddtt", CultureInfo.InvariantCulture)).ToList(); 

Тогда

temp.Min("yyyyMMddtt"); 

temp.Max("yyyyMMddtt"); 
+0

Будет ли 'DateTime.Parse' работать над этими строками? – Rawling

+0

Я думаю, что, возможно, 'ParseExact'? Также ToString нуждается в 'tt' not' PM' –

+0

Также «PM» не будет отображаться как «PM», а как «P» {число месяцев}. – Rawling

1

Если бы мне пришлось угадать, что, кажется, так и есть. Я хотел бы сделать это

var dates = nameList.ConvertAll(s => { 
     var dateString = s.SubString(6); 
     var timeString = s.SubString(7, 2); 

     var date = DateTime.Parse(dateString); 

     if (timeString == "PM") 
     { 
      date = date.AddHours(12); 
     } 

     return date; 
    }); 

var max = date.Max(); 
var min = date.Min(); 
+0

@jordell: Спасибо всем. – Channa

+0

@Channa не стесняйтесь повышать – Jodrell

1

Так как вы определили свой формат, как yyyyMMdd в свой комментарий, вы должны урезать PM и AM из строки

List<DateTime> dateList = 
    nameList.Select(x => 
    DateTime.ParseExact(
         x.TrimEnd("PM".ToCharArray()).TrimEnd("AM".ToCharArray()), 
        "yyyyMMdd", 
         CultureInfo.InvariantCulture) 
        ).ToList(); 

      var Minimum = dateList.Min(); 
      var Maximum = dateList.Max(); 
      Console.WriteLine(Minimum.ToString()); 
      Console.WriteLine(Maximum.ToString()); 

Это даст вам:

18.6.2012 12:00:00 AM
07.07.2012 12:00:00

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