2013-06-05 2 views
4

저는 현재 텍스트 파일에서 여러 가지 데이터를 읽고 모든 것을 구문 분석하고 있습니다. 내가 다음에 구문 분석문자열에서 DateTime 개체 만들기

yyMMddHHmm 
1306050232 

: 존재가 파싱 항목 중 하나의 형식으로 이벤트의 시작 시간이이 파싱되면

string year = "20" + time[0].ToString() + time[1].ToString(); 
string month = time[2].ToString() + time[3].ToString(); 
string day = time[4].ToString() + time[5].ToString(); 
string hour = time[6].ToString() + time[7].ToString(); 
string minute = time[8].ToString() + time[9].ToString(); 
string ampm =""; 
int hourInt = Convert.ToInt32(hour); 

if (hourInt <= 12) 
{ 
    time = month + "." + day + "." + year + "@" + hour + ":" + minute + " " + "AM"; 
    ampm= "AM";       
} 
else 
{ 
    hourInt = hourInt - 12;  
    time = month + "." + day + "." + year + "@" + hourInt.ToString() + ":" + minute + " " + "PM"; 
    ampm= "PM"; 
} 

, 내가 결합 변수를 가져 와서 DateTime에 넣으려고합니다. 내가 왜, 또는 방법을 제대로 수행하는 이해하지

System.FormatException: String was not recognized as a valid DateTime. 
    at System.DateTime.ParseExact(String s, String format, IFormatProvider provider) 
    at Project.GUI.parseSchedule(Int32 count) 

: 내 문제가

string tempStartTime = year + "-" + month + "-" + day + " " + hour + ":" + minute + " " + ampm; 

string starttime = DateTime.ParseExact(tempStartTime, "yyyy-MM-dd HH:mm tt",null); 

, 나는 시도 캐치에서이 같은 경고를 얻을.

내가 원했던 것은 파일에서 시작 시간을 가져 와서 datetime 객체로 변환하고 나중에 작업하는 것입니다.

+0

이 질문은 도움이 될 수 있습니다. http://stackoverflow.com/questions/1951004/convert-dd-mm-yyyy-hhmmss-fff-from-string-to-datetime-in-c-sharp?rq= 1 –

답변

11

왜 단순히 당신이로 시작하는 형식 구문 분석하지?

var dt = DateTime.ParseExact(time, "yyMMddHHmm", CultureInfo.InvariantCulture); 

수행중인 모든 사전 처리가 필요하지 않습니다.

+0

이 질문에 나를 도울 수 있습니까? http : //stackoverflow.com/questions/36542296/extension-method-to-convert-string-and-create-new-datetime-object-from-it –

2

는 DateTime.ParseExact에서보세요() http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

DateTime result=null; 
    CultureInfo provider = CultureInfo.InvariantCulture; 
    // Parse date and time with custom specifier. 
    string dateString = "Sun 15 Jun 2008 8:30 AM -06:00"; 
    string format = "ddd dd MMM yyyy h:mm tt zzz"; 
    try { 
    result = DateTime.ParseExact(dateString, format, provider); 
    Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); 
    } 
    catch (FormatException) { 
    Console.WriteLine("{0} is not in the correct format.", dateString); 
    } 
3

구문 분석 전에 구문 분석을 수행하는 것이 일반적으로 필요하지 않습니다. 당신이 입력 문자열을

//      yyMMddHHmm 
string timestampString = "1306050232"; 

이있는 경우 그럼 당신은 할 수 있어야한다 :

CultureInfo provider = CultureInfo.InvariantCulture; 
DateTime timestamp = DateTime.ParseExact(timeStampString, "yyMMddHHmm", provider); 

하지 않으면, 당신이 받고있는 정확한 오류에 대한 자세한 정보를 가지고 싶습니다.

1

모든 것을 구문 분석하지 않고 custom formatters을 조사하고 싶을 수 있습니다. 나는 이것이 당신의 코드를 더 maintainable하게 만들고 아마 해독하기 다소 쉬울 것이라고 생각한다. 이 페이지에는 코드에 넣기 전에 형식 문자열을 테스트 할 수있는 도구가 있습니다.