2010-04-07 8 views
1

나는, 내가 목록을 어떻게C# 날짜 시간 조작

13/04/2010 10:30:00 
13/04/2010 13:30:00 
14/04/2010 10:30:00 
14/04/2010 13:30:00 
15/04/2010 10:30:00 
15/04/2010 13:30:00 
16/04/2010 10:30:00 
17/04/2010 11:00:00 
17/04/2010 13:30:00 
17/04/2010 15:30:00 

출력 할 다음과 같은 형식의 이벤트에 대한 날짜 목록이 위의 목록은 다음과 같이 같을 것이다 있도록 :

13/04/2010 
10:30:00 
13:30:00 

14/04/2010 
10:30:00 
13:30:00 

15/04/2010 
10:30:00 
13:30:00 

16/04/2010 
10:30:00 

17/04/2010 
11:00:00 
13:30:00 
15:30:00 
+1

더 구체적으로 할 필요가 있다고 생각합니다. 날짜는 어디에 보관됩니까? 그들은 어떻게 회수됩니까? 그것들을 어떻게 표시 할 계획입니까 (어떤 플랫폼)? – CAbbott

+1

날짜는 어디에서 오는거야? 프로그램에서 포맷 된 텍스트 또는 실제 날짜 번호입니까? – dawg

답변

11

잘 나는 디스플레이 측면에 대해 알고하지 않습니다,하지만 당신은 .NET을 사용하는 경우 그룹화면은 3.5 간단하다

var groups = list.GroupBy(dateTime => dateTime.Date); 

foreach (var group in groups) 
{ 
    Console.WriteLine("{0}:", group.Key); 
    foreach(var dateTime in group) 
    { 
     Console.WriteLine(" {0}", dateTime.TimeOfDay); 
    } 
} 
+0

원할 경우이 값을 단일 IEnumerable 으로 변환 할 수도 있습니다. 각 Console.WriteLine()을 yield return으로 바꿉니다. 그런 다음 콘솔로 보낼 수는 있지만 데이터 컨트롤에 바인딩하거나 원하는 다른 작업을 수행 할 수도 있습니다. –

+2

답변입니다. 너는 미쳤어. Jon! – Audie

+0

DateTime + C# == JonSkeet 신호. –

0
 List<DateTime> dateTimes = new List<DateTime>(); 
     Dictionary<string, List<string>> data = new Dictionary<string, List<string>>(); 
     foreach (DateTime t in dateTimes) 
     { 
      if (!data.ContainsKey(t.ToShortDateString())) 
      { 
       data.Add(t.ToShortDateString(), new List<string>()); 
      } 

      data[t.ToShortDateString()].Add(t.ToShortTimeString()); 
     } 

     foreach (string key in data.Keys) 
      data[key].Sort(); 

     foreach (var pair in data) 
     { 
      Console.WriteLine(pair.Key); 
      foreach (string time in pair.Value) 
       Console.WriteLine(time); 

      Console.WriteLine(); 
     } 
+1

왜 모든 문자열 변환이 필요합니까? 왜 디스플레이의 시점에서 변환하지 않습니까? –

0

당신이 목록 < 같은 날짜 시간 > 뭔가에 날짜가 있다면 당신이 할 수 있습니다 :

DateTime dtTemp = DateTime.MinValue; 
StringBuilder sb = new StringBuilder(); 
foreach(DateTime dt in MyDateList) 
{ 
    if (dt == dtTemp) sb.AppendLine(dt.ToString("HH:mm:ss")); 
    else 
    { 
     dtTemp = dt; 
     sb.AppendLine(); 
     sb.AppendLine(dt.ToString("dd/MM/yyyy HH:mm:ss")); 
    } 
} 
Console.WriteLine(sb.ToString().Trim()); 

편집 : 트림 출력을 공백으로 첫 선을 제거 할 수 있습니다.

+0

날짜가 이미 입력에 그룹화되어있는 경우 (예제에서는 true이지만 명시되지 않은 경우)에만 작동합니다. OP의 예가 그가 원하는 바가 아니었다면 그것을 언급하십시오. 그리고 처음에는 여분의 줄을 쓸 것입니다. –

+0

네가 맞아, 나는 그 목록을 예제에 기초하여 정렬했다고 생각했다. 감사. – JYelton