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
:IFormatProvider.GetFormat(typeof(DateTimeFormatInfo));
NumberFormatInfo
:IFormatProvider.GetFormat(typeof(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);
하지만 그러지 마세요.
그 모든 힘든 일들은 이미 여러분을 위해 쓰여졌습니다.
에서 a를 받는 방법:
DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);
에서 a를 받는 방법:
NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);
의 IFormatProvider
자신만의 문화적 대상을 만드는 것입니다.이 그이실는한하행을 실행하는 한.IFormatProvider
그리고 그들이 요청한 물건들을 돌려주면, 당신은 내장된 문화를 우회할 수 있습니다.
사용할 수도 있습니다.IFormatProvider
임의의 배양 개체를 전달하는 방법 - 를 통해.IFormatProvider
예: 다른 문화권에서 신의 이름
- 신이시여
- 신이시여
- 여호바
- 야훼
- יהוה
- אהיה אשר אהיה
를 통해 지정 이를사자정의용해통▁your▁thisLordsNameFormatInfo
교실에서 차를 타고 이동하는 것IFormatProvider
그리고 당신은 관용구를 보존할 수 있습니다.
실제로는 전화할 필요가 없습니다.GetFormat
의 IFormatProvider
네 자신.
이 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에는 숫자 및 날짜 및 시간 값의 형식 지정 또는 구문 분석에 사용되는 문화별 정보를 제공하기 위해 다음과 같은 세 가지 미리 정의된 IFormProvider 구현이 포함되어 있습니다.
- 그
NumberFormatInfo
클래스 - 특정 문화에 대한 통화, 천 구분 기호 및 십진수 구분 기호와 같이 숫자 형식을 지정하는 데 사용되는 정보를 제공합니다.에서 인식되는 미리 정의된 형식 문자열에 대한 정보NumberFormatInfo
개체 및 숫자 형식 지정 작업에 사용되는 항목은 표준 숫자 형식 문자열 및 사용자 지정 숫자 형식 문자열을 참조하십시오. - 그
DateTimeFormatInfo
클래스 - 특정 문화에 대한 날짜 및 시간 구분 기호 또는 날짜의 연도, 월 및 일 구성 요소의 순서 및 형식과 같은 날짜 및 시간 형식을 지정하는 데 사용되는 정보를 제공합니다.에서 인식되는 미리 정의된 형식 문자열에 대한 정보DateTimeFormatInfo
개체 및 숫자 형식 지정 작업에 사용되는 항목은 표준 날짜 및 시간 형식 문자열 및 사용자 지정 날짜 및 시간 형식 문자열을 참조하십시오. - 그
CultureInfo
특정한 문화를 대표하는 수업.그것의.GetFormat
메드반환합니다로문을 합니다.NumberFormatInfo
또는DateTimeFormatInfo
object는 그의, 것여에따의 여부에 .CultureInfo
개체는 숫자나 날짜 및 시간을 포함하는 형식 지정 또는 구문 분석 작업에 사용됩니다.
형식도 합니다.NET Framework는 사용자 지정 형식도 지원합니다.여기에는 일반적으로 IFormatProvider와 ICustomFormatter를 모두 구현하는 형식 지정 클래스를 만드는 작업이 포함됩니다. 이 는 사용자 지정됩니다.String.Format(IFormatProvider, String, Object[])
.
API는 http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx 에서 확인하십시오.
DateTimeFormatInfo 클래스는 이 인터페이스를 구현하므로 DateTime 문자열의 형식을 제어할 수 있습니다.
이 질문에서는 IFormatProvider 및 DateTime에 대해 질문하지만 의 다른 컨텍스트에서도 IFormatProvider를 사용할 수 있습니다.NET(예: 문자열).포맷.
그런 다음 IFormatProvider 인스턴스를 전달하고 IFormatProvider를 구현하여 개체에 대한 문자열 형식을 지정할 수 있습니다.따라서 IFormatProvider 및 관련 ICustomFormatter 인터페이스의 사용은 에서 보다 광범위하게 이루어집니다.날짜뿐만 아니라 NET.
예: 이 구현을 고려합니다.
using System;
namespace ConsoleApp
{
class EmployeeProductivityFormatProvider : IFormatProvider, ICustomFormatter
{
public string Format(string format, object arg, IFormatProvider formatProvider)
{
int rating = (int)arg;
if (rating == 0)
{
return $"{rating} (new employee)";
}
if (rating > 0)
{
return $"{rating} (good employee)";
}
return $"{rating} (bad employee)";
}
public object GetFormat(Type formatType)
{
if (formatType == typeof(ICustomFormatter))
{
return this;
}
return null;
}
}
}
이제 다음과 같은 int 값을 지정하여 직원의 문자열 표현을 가져올 수 있습니다.
string prod = string.Format(new EmployeeProductivityFormatProvider(),
"Productivity rating: {0}",
employee.ProductivityRating);
DateTime의 경우 이미 생성된 IFormatProvider 구현 중에서 선택할 수 있는 것이 많습니다.개체를 문자열로 표시하고 형식을 에 지정하는 매우 유연한 방법입니다.NET과 매우 일반적인 개념.
언급URL : https://stackoverflow.com/questions/506676/what-does-iformatprovider-do
'programing' 카테고리의 다른 글
Lodash를 사용하여 목록에서 요소를 제거하려면 어떻게 해야 합니까? (0) | 2023.05.11 |
---|---|
C# 디렉터리에 있는 모든 파일을 재귀적으로 나열하는 방법은 무엇입니까? (0) | 2023.05.11 |
특성 오류: 'ElementExcel 파일을 가져오려고 할 때 Tree' 개체에 'getiterator' 특성이 없습니다. (0) | 2023.05.11 |
woocommerce 이메일 알림의 get_post_module (0) | 2023.03.27 |
경고: 실패한 propType: 잘못된 prop 'component'가 'Route'에 제공됨 (0) | 2023.03.27 |