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으로 설정하고 CustomFormat
prperty를 M/dd/yyyy
.
'your programing' 카테고리의 다른 글
Firebase 클라우드 메시징-로그 아웃 처리 (0) | 2020.12.30 |
---|---|
ASP.NET MVC 컨트롤러 메서드가 ActionResult를 반환해야합니까? (0) | 2020.12.30 |
JavaScript에서 "원시"href 콘텐츠를 얻는 방법 (0) | 2020.12.30 |
파이썬의 문자열 연결과 str.join이 얼마나 느립니까? (0) | 2020.12.30 |
끝에 "then"이있는 "if"문의 차이점은 무엇입니까? (0) | 2020.12.30 |