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:
- 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 aNumberFormatInfo
object and used in numeric formatting operations, see Standard Numeric Format Strings and Custom Numeric Format Strings. - 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 aDateTimeFormatInfo
object and used in numeric formatting operations, see Standard Date and Time Format Strings and Custom Date and Time Format Strings. - The
CultureInfo
class, which represents a particular culture. ItsGetFormat
method returns a culture-specificNumberFormatInfo
orDateTimeFormatInfo
object, depending on whether theCultureInfo
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
'Programing' 카테고리의 다른 글
명부 (0) | 2020.09.16 |
---|---|
정적 클래스 대신 싱글 톤 패턴을 언제 사용해야합니까? (0) | 2020.09.16 |
간단한 자바 프로젝트를 위해 선택할 아키 타입 (0) | 2020.09.16 |
Linq to Entities를 사용하는 'Contains ()'해결 방법? (0) | 2020.09.16 |
사이트에서 URL 목록 가져 오기 (0) | 2020.09.16 |