Programing

IFormatProvider의 기능은 무엇입니까?

lottogame 2020. 9. 16. 08:23
반응형

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쿼리 할 수있는 일반적으로 사용 가능한 두 가지 문화 개체 는 다음과 같습니다.

  • DateTimeFormatInfo
  • NumberFormatInfo

일반적으로 작동하는 방식 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에서 따라갈 수 있으며 관용구를 보존 할 수 있습니다.

In reality you will never need to call GetFormat method of IFormatProvider yourself.

Whenever you need an IFormatProvider you can pass a CultureInfo object:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

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

Note: Any code is released into the public domain. No attribution required.


Passing null as the IFormatProvider is not the correct way to do this. If the user has a custom date/time format on their PC you'll have issues in parsing and converting to string. I've just fixed a bug where somebody had passed null as the IFormatProvider when converting to string.

Instead you should be using CultureInfo.InvariantCulture

Wrong:

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

Correct:

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

You can see here http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx

See the remarks and example section there.


IFormatProvider provides culture info to the method in question. DateTimeFormatInfo implements IFormatProvider, and allows you to specify the format you want your date/time to be displayed in. Examples can be found on the relevant MSDN pages.


Check http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx for the API.


By MSDN

The .NET Framework includes the following three predefined IFormatProvider implementations to provide culture-specific information that is used in formatting or parsing numeric and date and time values:

  1. The NumberFormatInfo class, which provides information that is used to format numbers, such as the currency, thousands separator, and decimal separator symbols for a particular culture. For information about the predefined format strings recognized by a NumberFormatInfo object and used in numeric formatting operations, see Standard Numeric Format Strings and Custom Numeric Format Strings.
  2. The DateTimeFormatInfo class, which provides information that is used to format dates and times, such as the date and time separator symbols for a particular culture or the order and format of a date's year, month, and day components. For information about the predefined format strings recognized by a DateTimeFormatInfo object and used in numeric formatting operations, see Standard Date and Time Format Strings and Custom Date and Time Format Strings.
  3. The CultureInfo class, which represents a particular culture. Its GetFormat method returns a culture-specific NumberFormatInfo or DateTimeFormatInfo object, depending on whether the CultureInfo object is used in a formatting or parsing operation that involves numbers or dates and times.

The .NET Framework also supports custom formatting. This typically involves the creation of a formatting class that implements both IFormatProvider and ICustomFormatter. An instance of this class is then passed as a parameter to a method that performs a custom formatting operation, such as String.Format(IFormatProvider, String, Object[]).


The DateTimeFormatInfo class implements this interface, so it allows you to control the formatting of your DateTime strings.

참고URL : https://stackoverflow.com/questions/506676/what-does-iformatprovider-do

반응형