[c#] IFormatProvider의 기능은 무엇입니까?

Datetime.ParseExact 메서드를 가지고 놀았는데 IFormatProvider가 필요합니다.

null 입력으로 작동하지만 정확히 무엇을합니까?



답변

Ian Boyd의 답변에 추가로 :

또한 CultureInfo이 인터페이스를 구현하고 귀하의 경우에 사용할 수 있습니다. 예를 들어 프랑스어 날짜 문자열을 구문 분석 할 수 있습니다. 당신은 사용할 수 있습니다

var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);


답변

IFormatProvider인터페이스는 일반적으로 당신을 위해 구현되는 CultureInfo클래스, 예를 들면 :

  • CultureInfo.CurrentCulture
  • CultureInfo.CurrentUICulture
  • CultureInfo.InvariantCulture
  • CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)

인터페이스는 문화에서 문화 별 데이터 세트를 가져 오는 함수의 게이트웨이입니다. 를 IFormatProvider쿼리 할 수있는 일반적으로 사용 가능한 두 가지 문화 개체 는 다음과 같습니다.

일반적으로 작동하는 방식 IFormatProvider은에 DateTimeFormatInfo개체 를 제공 하도록 요청 하는 것입니다.

DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
   DoStuffWithDatesOrTimes(format);

또한 모든 IFormatProvider인터페이스가에서 CultureInfo파생되거나 에서 파생 된 클래스에 의해 구현 될 가능성이 있다는 내부 지식이 DateTimeFormatInfo있으므로 인터페이스를 직접 캐스팅 할 수 있습니다.

CultureInfo info = provider as CultureInfo;
if (info != null)
   format = info.DateTimeInfo;
else
{
   DateTimeFormatInfo dtfi = provider as DateTimeFormatInfo;
   if (dtfi != null)
       format = dtfi;
   else
       format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
}

if (format != null)
   DoStuffWithDatesOrTimes(format);

하지만 그러지 마

그 모든 노력은 이미 당신을 위해 쓰여졌습니다.

의 GET에 DateTimeFormatInfo에서를IFormatProvider :

DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);

의 GET에 NumberFormatInfo에서를IFormatProvider :

NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);

의 가치는 IFormatProvider자신의 문화 개체를 만드는 것입니다. 을 구현 IFormatProvider하고 요청한 객체를 반환하는 한 기본 제공 문화권을 우회 할 수 있습니다.

IFormatProvider.NET Framework를 통해 임의의 문화 개체를 전달하는 방법으로 사용할 수도 있습니다 IFormatProvider. 예 : 다른 문화권의 신의 이름

  • 하느님
  • 하느님
  • Jehova
  • 야웨
  • יהוה
  • אהיה אשר אהיה

이를 통해 사용자 정의 LordsNameFormatInfo클래스가 IFormatProvider에서 따라갈 수 있으며 관용구를 보존 할 수 있습니다.

실제로 GetFormatIFormatProvider자신의 메서드 를 호출 할 필요가 없습니다 .

필요할 때마다 객체를 IFormatProvider전달할 수 있습니다 CultureInfo.

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

transactionID.toString(CultureInfo.CreateSpecificCulture("qps-ploc"));

참고 : 모든 코드는 공개 도메인으로 공개됩니다. 귀속이 필요하지 않습니다.


답변

null을 전달하는 IFormatProvider것은 올바른 방법이 아닙니다. 사용자가 PC에 사용자 지정 날짜 / 시간 형식을 사용하는 경우 구문 분석 및 문자열로 변환하는 데 문제가 있습니다. 문자열로 변환 할 때 누군가가 IFormatProvider로 null을 전달한 버그를 수정했습니다.

대신 당신은 CultureInfo.InvariantCulture

잘못된:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);

옳은:

string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);


답변

IFormatProvider 는 해당 메서드에 문화 정보를 제공합니다. DateTimeFormatInfo 는 IFormatProvider를 구현하며 날짜 / 시간을 표시 할 형식을 지정할 수 있습니다. 예제는 관련 MSDN 페이지에서 찾을 수 있습니다.


답변

http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx에서 볼 수 있습니다 .

비고 및 예제 섹션을 참조하십시오.


답변


답변

으로 MSDN

.NET Framework에는 숫자 및 날짜 및 시간 값의 형식을 지정하거나 구문 분석하는 데 사용되는 문화권 별 정보를 제공하기 위해 미리 정의 된 다음 세 가지 IFormatProvider 구현이 포함되어 있습니다.

  1. NumberFormatInfo특정 문화권에 대한 통화, 천 단위 구분 기호 및 소수 구분 기호와 같이 숫자 형식을 지정하는 데 사용되는 정보를 제공 하는 클래스입니다. NumberFormatInfo개체에서 인식하고 숫자 형식 지정 작업에 사용되는 미리 정의 된 형식 문자열에 대한 자세한 내용 은 표준 숫자 형식 문자열 및 사용자 지정 숫자 형식 문자열 단원을 참조하십시오.
  2. DateTimeFormatInfo특정 문화권의 날짜 및 시간 구분 기호 또는 날짜의 연도, 월, 일 구성 요소의 순서 및 형식과 같이 날짜 및 시간의 형식을 지정하는 데 사용되는 정보를 제공 하는 클래스입니다. DateTimeFormatInfo개체에서 인식하고 숫자 형식 지정 작업에 사용되는 미리 정의 된 형식 문자열에 대한 자세한 내용 은 표준 날짜 및 시간 형식 문자열과 사용자 지정 날짜 및 시간 형식 문자열을 참조하십시오.
  3. CultureInfo특정 문화를 대표하는 클래스. 해당 GetFormat메서드는 개체가 숫자 또는 날짜 및 시간과 관련된 서식 지정 또는 구문 분석 작업에 사용 되는지 여부에 따라 문화권 별 NumberFormatInfo또는 DateTimeFormatInfo개체를 반환합니다 CultureInfo.

.NET Framework는 사용자 지정 서식도 지원합니다. 여기에는 일반적으로 IFormatProvider 및 ICustomFormatter를 모두 구현하는 형식 지정 클래스 생성이 포함됩니다. 그런 다음이 클래스의 인스턴스는와 같은 사용자 지정 형식 지정 작업을 수행하는 메서드에 매개 변수로 전달됩니다 String.Format(IFormatProvider, String, Object[]).