2014-11-11 2 views
0

주어진 문화권에서 문자열 (invariantCulture의 날짜를 나타내는)을 dateTime으로 변환하려고합니다. 문제는 날짜가 독일어 문화로 변환 될 때, 그 날은 달이되고 달은 날이된다. 코드 아래에 무엇이 잘못되었거나 뭔가 빠졌습니까?문자열을 다른 문화권의 날짜로 변환

var day = 11; var month = 12; var year = 2014; 

var someDate = new DateTime(year, month, day); 
var theDay = someDate.Day;//11 ok as expected 
var theMonth = someDate.Month; //12 ok as expected 

var dateString = someDate.ToString(CultureInfo.InvariantCulture); 

var date1 = DateTime.Parse(dateString, CultureInfo.GetCultureInfo("de-De")); 
var day1 = date1.Day;//12 this should be 11 ? 
var month1 = date1.Month; //11 this should be 12 ? 
+1

당신이 날짜 열을 제공 할 수주십시오? 나는. 디버거에서 무엇입니까? – TomTom

+3

당신은'InvariantCulture'를 사용하여 날짜를 포맷하고 다른 문화권을 사용하여 그것을 구문 분석하고 있습니다. –

+0

디버거는 dateString을 12/11/2014 00:00:00으로 표시합니다. –

답변

5

DateTime.Parse에 두 번째 인수는 문자열에서 어떤 형식 파서가 아니라 어떤 형식 당신이 그것을로 변환 할 얘기하는 데 사용됩니다. 불변의 문자열을 생성 한 다음 독일어 문자열로 구문 분석하여 하루와 월이 바뀌는 이유를 알려줍니다.

목표가 날짜의 독일어 문자열 표현을 얻으려는 경우 var dateString = someDate.ToString(CultureInfo.GetCultureInfo("de-DE"))을 사용하십시오.

0

변경 다음 줄을 다시 테스트 :

var dateString = someDate.ToString(CultureInfo.InvariantCulture); 

에 :

var dateString = someDate.ToString("O"); 

나 :

var dateString = someDate.ToString("S"); 
2

내가 de-De 문화가없는 것 같아요 표준 날짜 및 시간 형식은입니다.. 당신이 InvariantCultureDateTime.ToString() 방법을 사용하기 때문에

, 결과 문자열 InvariantCulture에 대한 MM/dd/yyyy HH:mm:ss입니다 "G" standard format 될 것입니다. 그 때문에의

, dateString12/11/2014 00:00:00되며 de-DE 문화는 표준 날짜 및 시간 형식 MM/dd/yyyy HH:mm:ss을 가지고 있지만 de-DE 문화 dd.MM.yyyy HH:mm:ss입니다 dd/MM/yyyy HH:mm:ss을 가지고하지 않습니다.

DateTime.Parse 방법은 dd/MM/yyyy HH:mm:ss입니다 패턴과 일치하는 이유 즉, (가 DateSeparator는 이후를 .dd.MM.yyyy HH:mm:ss 형식이어야한다).

그래서 12Day11Month으로 구문 분석합니다.

DateTime (이미 가지고있는 경우) 과 같이 .ToString() 방법을 사용하면됩니다.

var culture = new CultureInfo("de-De"); 
var dateString = someDate.ToString(culture); 

기억

하는 DateTime어떤 암시 적 형식이나 문화를 가지고 있지 않습니다. 단지 날짜와 시간 값을 가지고 있습니다. String 표현은 형식을 가질 수 있습니다.

그건 그렇고, 모든 표준 날짜와 시간 패턴을 찾을 수 있습니다 de-DE 문화권;

var culture = new CultureInfo("de-De"); 
foreach (var format in culture.DateTimeFormat.GetAllDateTimePatterns()) 
{ 
    Console.WriteLine(format); 
} 
0

좋아요, 여기 제가 원하는 것을 생각합니다. 제가 맞는지 확실하지 않습니다 : 불변 배양 날짜 문자열을 읽고 독일어 배양 날짜 문자열로 변환하고 싶습니다. 하지만 예제에서는 불변 배양 일을 독일어 배양 일로 파싱하려고합니다. 물론 그것이 오역으로 이어집니다. 이 시도 :

string invariantCultureDateString = "12/11/2014 00:00:00"; 
var dateTime = DateTime.Parse(invariantCultureDateString, CultureInfo.InvariantCulture); 
string germanCultureDateString = dateTime.ToString(CultureInfo.GetCultureInfo("de-De")); 

BR

관련 문제