2010-02-24 3 views
22

주어진 다음의 두 문화 :.NET : InvariantCulture와 en-US간에 차이점이 있습니까?

CultureInfo c1 = InvariantCulture; 
CultureInfo c2 = new CultureInfo("en-US"); 

와 내가 모두 문화에 대한 특정 정보의 모든 부분, 예컨대 :

c1.DateTimeInfo.ShortDatePattern; 
c2.DateTimeInfo.ShortDatePattern; 

c1.DateTimeInfo.LongDatePattern; 
c2.DateTimeInfo.LongDatePattern; 

c1.NumberFormat.CurrencyDecimalDigits; 
c2.NumberFormat.CurrencyDecimalDigits; 

c1.TextInfo.IsRightToLeft; 
c2.TextInfo.IsRightToLeft; 

내가 어떤 차이점을 찾을 것인가를 조사했다?

다른 말로하면, InvariantCulture는 모든 목적으로 "en-US"문화와 동일합니까?

+1

너는 단지 이것을 호기심으로 묻는가? 각 문화권에는 명확하게 정의 된 특정 유스 케이스가 있습니다. 그들이 동일하든 그렇지 않든 상관없이 소프트웨어를 작성하는 과정에는 불리합니다. –

+0

InvariantCulture를 사용할 수 있는지 알고 싶기 때문에 묻습니다. "문화가 뭔지 모르겠다. 내가 뭐라 구요?" 날짜 나 돈 값 또는 숫자를 구문 분석하려고하면 문화가 무엇인지 알지 못합니다. 여기 엔 en-US에도 날짜를 쓰는 방법에는 여러 가지가 있습니다. 그 사람이 의미하는 영어의 하위 문화가 무엇인지 어떻게 알 수 있습니까? 그래서 그들 사이의 차이점을 묻는 것으로, CurrentThreadCulture, CurrentUICulture 또는 CurrentCulture를 강요하기보다는 InvariantCulture를 사용하여 얼마나 자주 벗어날 수 있는지 보았습니다. –

+3

나는 아무것도 가지고 가려고하지 않는 것이 좋습니다. 현재의 문화는 기계를 넘어서는 불변성이나 문화의 변화가 필요없는 모든 것에 사용해야합니다. 제어 할 수없고 현재 culture와 일치하지 않고 특정 형식을 따르지 않고 해당 형식을 만드는 데 사용 된 culture에 태그를 지정하지 않은 데이터를 구문 분석하려고하면 아마도, 문화는 사용자가 선택할 수 있어야합니다. 불변량이 당신을 도울 것이라고 생각하지 않습니다. –

답변

28

예.

예 : InvariantCulture는 통화 기호로 "¤"대 국제 기호 인 달러 기호와 통화를 서식을 지정할 때 "$"를 사용합니다.

그러나 대부분의 경우 매우 유사합니다.

편집 : en-USInvariant의 차이 목록 :

      en-US      Invariant 
=====================  ==================   ================== 
Number     123456.78     +123456.78 
Currency Symbol   $       ¤ 
Currency     $123456.78     ¤123456.78 
Short Date    1/11/2012     01/11/2012 
Time      10:36:52 PM     22:36:52 
Metric     No       Yes 
Long Date     Wednesday, January 11, 2012 Wednesday, 11 January, 2012 
Year Month    January, 2012    2012 January 
+4

MSDN을 인용하십시오. * "InvariantCulture 속성은 중립도 아니며 특정 문화도 나타내지 않습니다. 그것은 문화에 민감하지 않은 세 번째 유형의 문화를 나타냅니다. 그것은 영어와 관련이 있지만 국가 나 지역과는 관련이 없습니다. "* ... 따라서 대부분의 부분을 영어로 행동하는 것이 좋습니다. (이상한 미국 날짜 형식의 경우 나는 무언가 제정신이되는 것을 좋아했을 것입니다.) 그러나 통화는 그냥 말도 안돼 :) – Joey

+3

논리적 인 날짜 형식 : yyyy-MM-dd. –

+1

Drat. 따라서 InvariantCulture를 사용하여 돈 문자열을 파싱하려고하면 전 세계 어디에서도 작동하지 않습니다. –

1

짧은 답변 예. InvariantCulture는 특정 문화가 아니라 그것이 말하는 것입니다. 그것은 특정 지역을 영어 아니지만

당신은 여기에 대한 자세한 내용을보실 수 있습니다 : MSDN

4

이 일부 실제 차이 (시계 창에서 두 값을 모두 확인)하지만 가장 관련성이 차이는 의도. InvariantCulture는 영어와 관련된 방식 인 경우 문화에 독립적 인 일부 데이터를 구문 분석하려는 의도를 보여 주지만 en-US는 미국 특정 방식으로 데이터를 구문 분석 할 실제 의도를 선언합니다.

0

다른 CultureNameLCID (this list 참조)이 있습니다.

또한 통화 기호는 InvariantCulture의 경우 ¤, en-US의 경우 $입니다.

InvariantCulture에서

: 대부분의 경우 그 제안

It is used in almost any method in the Globalization namespace that requires a culture.

, 그들은 교환 할 수있다. 그러나 이름은 주 의도를 가지고 있으므로 CultureInfo을 사용할 때 고려해야합니다.

2

글쎄, 당신은 코드의 당신의 조각 생산 수있는 것을 보면 : 당신은 약간의 차이가 나타납니다

CultureInfo c1 = CultureInfo.InvariantCulture; 
CultureInfo c2 = new CultureInfo("en-US"); 

Console.WriteLine(c1.DateTimeFormat.ShortDatePattern.ToString()); 
Console.WriteLine(c2.DateTimeFormat.ShortDatePattern.ToString()); 

Console.WriteLine(c1.DateTimeFormat.LongDatePattern.ToString()); 
Console.WriteLine(c2.DateTimeFormat.LongDatePattern.ToString()); 

Console.WriteLine(c1.NumberFormat.CurrencyDecimalDigits.ToString()); 
Console.WriteLine(c2.NumberFormat.CurrencyDecimalDigits.ToString()); 

Console.WriteLine(c1.TextInfo.IsRightToLeft.ToString()); 
Console.WriteLine(c2.TextInfo.IsRightToLeft.ToString()); 

을 : 미국이 끊어지면은 백본의,

MM/dd/yyyy 
M/d/yyyy 
dddd, dd MMMM yyyy 
dddd, MMMM dd, yyyy 
2 
2 
False 
False 

그리고 단지 생각을하고 유럽 ​​스타일의 날짜를 사용하기 시작하거나 미터법으로 이동하기로 결정합니다. (미터법은 악마의 도구입니다! 내 차가 호그 헤드에 40 개의 막대를 가져오고 그것이 내가 좋아하는 방식입니다!) InvariantCulture는 멋지고 부드럽게 머무를 수 있습니다. 그것이있는 방법. InvariantCulture를 사용하여 텍스트 형식으로 데이터베이스에 숨겨둔 모든 날짜가 계속해서 작동합니다 ...

1

데이터의 의도를 고려하는 것이 매우 중요합니다. 직렬화하는 경우 InvariantCulture를 사용해야합니다.

참조 :은 Microsoft 문서에서 http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.aspx

: 고정 문화권을 제외하고

동적 문화 데이터

문화의 데이터 동적입니다. 사전 정의 된 문화에 대해서도 마찬가지입니다. 입니다. ...

주의

데이터를 저장, 바이너리 형식을 사용하여 고정 문화권, 를 사용하거나 특정 문화에 독립적 인 형식을 사용해야합니다 응용 프로그램. 특정 문화권 (고정 문화권 제외)과 연결된 현재 값에 따라 저장된 데이터는 으로 읽을 수 없게되거나 문화가 변경되면 의미가 바뀔 수 있습니다.

사용자가 자신의 지역 및 언어 설정을 영어 (미국)로 설정했지만 개인 날짜 형식을 dd-MMM-yy로 선택한 경우 최근 방금이 문제가 발생했습니다. 그는 기본 en-US 형식의 날짜가 "4/29/2010 1:45:30 PM"이고 코드가

인 클라이언트로부터 프로젝트를 받았습니다. customValue = DateTime.Parse (customValue.ToString (customValue.ToString), CultureInfo.CreateSpecificCulture ("ko-US"));

은 지역 환경 설정이 일반적인 en-US 형식보다 우선하기 때문에 예외입니다.

관련 문제