2009-08-25 5 views
3

DateTime.ParseExact를 사용하여 DateTime 문자열을 파싱하는 데 어려움을 겪고 있습니다.DateTime 문자열 파싱

DateTime result; 
    CultureInfo provider = CultureInfo.InvariantCulture; 

    // Parse date-only value with invariant culture. 
    //format = "mm/dd/yyyy"; 
format = "d"; 
    try 
    { 

     result = DateTime.ParseExact(data+" 12:00:00 AM", format, provider); 
    } 

data는 "5/20/2009"형식의 날짜가로드 된 문자열 변수입니다. 나는 가짜 시간에 tacking을 시도해 보았다. 그게 효과가있을지를 보았고, tack on이나 tack을 사용하지 않았다. 또한 "g"형식 지정자를 사용하여 시도하고 작동하지 않았다, 나는 항상 유효한 DateTime 문자열이 아닙니다 예외가 발생합니다. 그것이 작동하는 유일한 날짜는 "12/20/2009"와 같습니다 ("MM"부분에 2 자리가 표시됨)

한 자리 숫자로 된 월을 사용하는 데는이 루틴을 사용할 수 없습니다! MSDN의 예제는 MSDN에서

6/15/2009 1:45:30 PM -> 6/15/2009 (en-US)

입니다.이 기능은 작동하지 않습니다. 나는 내가 뭘 잘못하고 있는지 이해하지 못하고있다. 나는 또한 "mm/dd/yyyy"와 "MM/dd/yyyy"와 같은 형식 지정자를 시도했지만 아무 소용이 없습니다.

DateTime.ParseExact("6/15/2009", "d", CultureInfo.GetCultureInfo("en-US")); 

답변

6

, 당신은 EN-US 문화를 지정해야

format = "M/dd/yyyy"; 

공지 사항 만 1 M.

확인 및 자세한 내용은 this article on MSDN을 참조하십시오.

+0

왜 내가 그 문화를 지정해야합니다? 또한 ParseExact가 아닙니다. 우리는 날짜 문자열이 나오는 형식을 정확히 알고 있습니다. 왜 형식 문자열을 사용할 수 없습니까? 이것을 사용하면 거기에 있으면 안되는 것들을 가져올 수 있습니다 (날짜 필드의 시간 지정은 아니오입니다) – Earlz

+0

예제를 ParseExact로 변경했습니다. 문화권을 지정해야합니다. 왜냐하면 입력 내용을 문화권의 방식 (즉, en-US 형식)으로 파싱하고 싶다고 말하기 때문입니다. – dtb

+0

좋아, 나는 단지 불변량이 미국을 의미한다고 생각했다. .. 고마워! – Earlz

4

내가 사용하려는 생각 : 당신이 EN-US 형식의 날짜 시간을 구문 분석하려면

+0

아니요, 틀 렸습니다. 그러면 "11/15/2009"가 "1/15/2009"로 변합니다. – Earlz

+2

실제로 시도해 보셨습니까? 왜냐하면 가지고 있고, 작동하는 것 같습니다 (11/15/2009는 2009 년 1 월 15 일이되지 않습니다). 1 'M'은 단순히 한 자리 월 앞에 0을 추가하지 않음을 나타냅니다. 정수에서 ToString ("0")을 호출하면 패딩 0이없는 숫자가 반환됩니다. –

+0

Dan의 말이 맞습니다. 형식 문자열이 의미하는 바를 이해하지 못한다면, 여분의 M없이 11 -> 1로 변환 될 것입니다. – davewasthere

1

ParseExact는 형식 문자열에서 사용될 때 '/'는 문화 - 단지 자리 표시 자입니다 정확한 긴 형식 지정자 대신 "D"의 (예를 들어, MM/DD/YYYY)

+0

그것은 여전히 ​​예외를 줄 것이다. 만약 내가 "0"을 "06/20/2009"과 같은 것으로 만들려면 올바른 것을 모두 파싱 할 것이지만 1 월은 1이 될 것이므로 "1/20/2009"가 될 것이고 이것은 아무 것도하지 않을 것입니다. 감각. – Earlz

0

문자를 사용해야합니다 특정 날짜 분리 문자. 문자 그대로 그대로 사용하려면 '\'문자로 이스케이프 처리해야합니다.

내가 제대로 문제를 이해 경우와 텍스트를 구문 분석 할 수 있습니다 :

DateTime.ParseExact(data, "MM\/dd\/yyyy", CultureInfo.InvariantProvider);