your programing

DateTime.ParseExact ()가 "M / d / yyyy"를 사용하여 "9/1/2009"를 구문 분석 할 수없는 이유

lovepro 2020. 12. 30. 19:51
반응형

DateTime.ParseExact ()가 "M / d / yyyy"를 사용하여 "9/1/2009"를 구문 분석 할 수없는 이유


다음과 같은 문자열이 있습니다 : "2009 년 9 월 1 일". C #을 사용하여 DateTime 개체로 변환하고 싶습니다.

이것은 작동합니다 :

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

그러나 이것이 작동하지 않는 이유를 이해하지 못합니다.

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

날짜 (예 : "9 월")에 단어가없고 특정 형식을 알고 있으므로 ParseExact를 사용하고 싶습니다 (CultureInfo가 필요한 이유를 알 수 없습니다). 하지만 "문자열이 유효한 DateTime으로 인식되지 않았습니다"예외가 계속 발생합니다.

감사

약간의 후속 조치. 다음은 작동하는 3 가지 접근 방식입니다.

DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", null);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture);
DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

작동하지 않는 3 가지가 있습니다.

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture);
DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"));
DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

따라서 Parse ()는 "en-US"와 함께 작동하지만 ParseExact는 작동하지 않습니다. 예상치 못한?


문제는 형식 문자열의 슬래시와 데이터의 슬래시라고 생각합니다. 이는 형식 문자열의 문화 별 날짜 구분 문자이며 마지막 인수는 null"현재 문화 사용"을 의미합니다. 이 경우 중 하나 슬래시를 이스케이프 ( 'M'/ 'D'/ 'YYYY') 또는 지정할 CultureInfo.InvariantCulture, 괜찮아 될 것입니다.

누군가 이것을 재현하는 데 관심이 있다면 :

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M'/'d'/'yyyy", 
                                  new CultureInfo("de-DE"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  new CultureInfo("en-US"));

// Works
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  CultureInfo.InvariantCulture);

// Fails
DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", 
                                  new CultureInfo("de-DE"));

기계의 문화가 "en-US"가 아니라고 확신합니다. 에서 문서 :

경우 공급자가 널 참조 (Visual Basic의 경우 Nothing) 인 경우, 현재의 문화가 사용됩니다.

현재의 문화는 "EN-US"가 아닌 경우 그것은 나를 위해 작동하지만 당신을 위해 일을하지 않는 이유는,이 설명 할 수 명시 적으로 "en-US입니다"를 할 문화를 지정할 때 사용할 수 있습니다.


시험

Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))

이 시도

provider = new CultureInfo("en-US");
DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider);

안녕.


XP에서 시도했는데 PC가 국제 시간 yyyy-Md로 설정되어 있으면 작동하지 않습니다. 줄에 중단 점을 놓고 처리되기 전에 '/'대신 '-'를 사용하도록 날짜 문자열을 변경하면 작동 함을 알 수 있습니다. CultureInfo가 있든 없든 차이가 없습니다. 구분 기호를 무시하기 위해 expercted 형식을 지정할 수 있다는 것이 이상하게 보입니다.


시도해보십시오 :

웹 구성 파일에서 구성

<system.web> <globalization culture="ja-JP" uiCulture="zh-HK" /> </system.web>

예 : DateTime dt = DateTime.ParseExact ( "08/21/2013", "MM / dd / yyyy", null);

참조 URL : http://support.microsoft.com/kb/306162/


DateTimePicker의 Format 속성을 custom으로 설정하고 CustomFormatprperty를 M/dd/yyyy.

참조 URL : https://stackoverflow.com/questions/1368636/why-cant-datetime-parseexact-parse-9-1-2009-using-md-yyyy

반응형