2017-03-10 1 views
1

테스트 서버에서 충돌이 발생하고 개발 서버에서 충돌하는 코드가 있습니다. dev 및 테스트 용 2 대의 Windows 2012R2 서버가 있습니다. 둘 다 동일한 패치 레벨에서 동일한 .NET FrameWork 버전. 둘 다 현재 사용자와 시스템 로컬에 대해 동일한 지역 설정 (네덜란드어)을 갖습니다. 이 네덜란드어 설정은 - 날짜 분리 자로 - 있습니다. 다음 코드 스니 j은 dev 서 v에서 작동하지만 테스트 서 v에서 충돌합니다. 콘솔 앱에 코드 2 줄을 추가 한 다음 오류를 다시 생성 할 수 있습니다.DateTime ParseExact 다른 서버에서의 다른 동작

(데모 콘솔 응용 프로그램에 대한 간체) 코드의 일부는 다음과 같습니다

 string date = "28/02/2017"; 
     DateTime dateDate = DateTime.ParseExact(date, "dd/MM/yyyy", null); 

그래서이 내 dev에 서버에서 작동하며 나는이 예외 내가 변경

Unhandled Exception: System.FormatException: String was not recognized as a vali 
d DateTime. 
    at System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInf 
o dtfi, DateTimeStyles style) 
    at System.DateTime.ParseExact(String s, String format, IFormatProvider provid 
er) 

를 얻을 테스트 에 추락 코드는

 string date = "28/02/2017"; 
     DateTime dateDate = DateTime.ParseExact(date, "dd/MM/yyyy", CultureInfo.InvariantCulture); 

두 서버 모두에서 작동합니다. CurrentCultue 및 CurrentUiCulture를 콘솔 응용 프로그램에서 출력 할 때 두 서버에서 동일합니다.

내 테스트 서버에서 어떤 문제가 발생할 수 있습니까? ParseExact 메서드에서 null을 전달하면 CurrentCulture를 사용하고 날짜 분리 자/오류가 발생해야하기 때문에 코드가 내 dev 서버에서도 충돌 할 것으로 예상됩니다.

감사 대니

+0

* 테스트 서버 *에 충돌이 그게 무슨 뜻 이죠 :

당신은 작은 따옴표로 /을 묶어야합니다

는 형식 문자열에서 리터럴 문자로 만들려면? 무슨 예외가 있니? – DavidG

+0

어쨌든 구문 분석에 culture를 지정해야합니다. – slawekwin

답변

0

nullCultureInfo.InvariantCulture 통과에 반대하는 대신 현재의 문화을 사용하도록 지정합니다.

MSDN

:

제공자 null 경우 배양 현재 사용에 해당하는 오브젝트 CultureInfo.

/은 datetime을 구문 분석 할 때 특별한 의미가 있습니다. 그들은 직각 문화의 DateSeparator으로 대체 될 것입니다. (The "/" custom format specifier)

또한 그들을 마스크 수 :

DateTime dateDate = DateTime.ParseExact(date, "dd'/'MM'/'yyyy", null); 
+0

실제로 작동합니다. 그러나 어떻게하면 내 첫 번째 서버에서 ''없이 작동하고 두 번째 서버에서 문화 설정이 같아도 예외가 발생할 수 있습니까? – Danny

+0

@ 대니 : 잘 모르겠습니다. 테스트가 다르거 나 문화 설정이 동일하다고하더라도 컴퓨터의 지역 설정을보십시오. https://blogs.technet.microsoft.com/askperf/2012/08/16/모든 컴퓨터 사용자를위한 지역 설정 변경 방법 –

+0

DateTime을 수행 할 때 "dd/MM/yyyy"형식을 전달할 때 /에 문자열을 쓰려면 /는 특별한 의미가 없습니까? 그건 잘 작동합니다. – Danny

0

/ 문자는 날짜 형식 문자열에 문자 그대로 해석되지 않습니다. 사용 된 형식 공급자에 따라 날짜 구분 기호로 대체됩니다.

"dd'/'MM'/'yyyy"