DateTime
을 String
으로 저장하는 이유는 무엇입니까? 그리고 에 DateTime
가 포함 된 이유는 무엇입니까? 항상 가장 적절한 데이터 유형을 사용하고 가장 마지막에 문자열로 변환해야합니다.
그러나이 작동합니다 :
string dateFormat = "dd-MM-yyyy HH:mm:ss.fff";
IEnumerable<string> filtered = strings
.Select(str => new { str, dt = DateTime.ParseExact(str, dateFormat, CultureInfo.InvariantCulture) })
.Where(x => x.dt >= start && x.dt <= end)
.OrderBy(x => x.dt) // if you want to order by the datetime value
.Select(x => x.str);
이 쿼리는 모든 문자열을 사용하고 DateTime
로 변환 DateTime.ParseExact
를 사용합니다. 그런 다음 원래의 string
과 DateTime
의 두 가지 속성과 DateTime
속성과 시작 및 종료 값으로 Enumerable.Where
의 필터가있는 익명 유형 (new{ .... }
)을 만듭니다. 리마잉 아이템은 datetime (보너스)에 의해 정렬됩니다. 마지막으로 문자열이 선택됩니다. 원하는 결과라고 가정했기 때문입니다.
쿼리를 구체화해야하는 경우 ToList
또는 간단한 foreach
을 사용할 수 있습니다. 귀하의 의견에 따라
foreach(string strDate in filtered)
{
Console.WriteLine(strDate);
}
편집 :
좋아, 그래서 내 기본 라인 처럼 보이는 경우 어떻게 내가 날짜 시간으로 저장할 수 있습니다이 2011년 5월 4일 12 : 42 : 04.160, 이벤트 dssd (23) .dfgg [2] 1 xx : 3332, 일부 자세한 텍스트. 나는이 줄을 분리하고 각 부분을 문자열 배열 문자열 [] _columns = line.Split (",". ToCharArray());에 각 부분을 저장한다. 첫 번째 부분은 datetime으로 저장하고 나머지는 문자열로 저장할 수 있습니까?
string dateFormat = "dd-MM-yyyy HH:mm:ss.fff";
string[] lines = new[]{"05-04-2011 12:42:04.160,Event dssd(23).dfgg[2] 1 xx:3332,some more text"};
var lineIfos = lines.Select(s => s.Split(','))
.Select(split => new{
date = DateTime.ParseExact(split[0].Trim(), dateFormat, CultureInfo.InvariantCulture),
rest = string.Join(",", split.Skip(1))
})
.Where(x => x.date >= start && x.date <= end)
.OrderBy(x => x.date);
foreach (var x in lineIfos)
Console.WriteLine("date:{0} rest of the line:{1}"
,x.date.ToString("d")
,x.rest);
왜 'DateTime'을'String'으로 저장합니까? 그리고 왜 날짜가 포함 된'List'을 가지고 있습니까? –
@TimSchmelter이 문제는 그의 필터링 문제보다 중요하다고 생각합니다. –
내 기본 회선이이 데이터로만 구성되어 있지 않으므로이 방법을 사용합니다. 먼저 3 부분으로 나누고 문자열 배열로 저장합니다. 그것은 데이터와 많은 텍스트를 내부에 가지고 있습니다. 다른 방법으로 어떻게 할 수 있습니까? – user2592968