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
에서 따라갈 수 있으며 관용구를 보존 할 수 있습니다.
실제로 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에는 숫자 및 날짜 및 시간 값의 형식을 지정하거나 구문 분석하는 데 사용되는 문화권 별 정보를 제공하기 위해 미리 정의 된 다음 세 가지 IFormatProvider 구현이 포함되어 있습니다.
NumberFormatInfo
특정 문화권에 대한 통화, 천 단위 구분 기호 및 소수 구분 기호와 같이 숫자 형식을 지정하는 데 사용되는 정보를 제공 하는 클래스입니다.NumberFormatInfo
개체에서 인식하고 숫자 형식 지정 작업에 사용되는 미리 정의 된 형식 문자열에 대한 자세한 내용 은 표준 숫자 형식 문자열 및 사용자 지정 숫자 형식 문자열 단원을 참조하십시오.DateTimeFormatInfo
특정 문화권의 날짜 및 시간 구분 기호 또는 날짜의 연도, 월, 일 구성 요소의 순서 및 형식과 같이 날짜 및 시간의 형식을 지정하는 데 사용되는 정보를 제공 하는 클래스입니다.DateTimeFormatInfo
개체에서 인식하고 숫자 형식 지정 작업에 사용되는 미리 정의 된 형식 문자열에 대한 자세한 내용 은 표준 날짜 및 시간 형식 문자열과 사용자 지정 날짜 및 시간 형식 문자열을 참조하십시오.CultureInfo
특정 문화를 대표하는 클래스. 해당GetFormat
메서드는 개체가 숫자 또는 날짜 및 시간과 관련된 서식 지정 또는 구문 분석 작업에 사용 되는지 여부에 따라 문화권 별NumberFormatInfo
또는DateTimeFormatInfo
개체를 반환합니다CultureInfo
.
.NET Framework는 사용자 지정 서식도 지원합니다. 여기에는 일반적으로 IFormatProvider 및 ICustomFormatter를 모두 구현하는 형식 지정 클래스 생성이 포함됩니다. 그런 다음이 클래스의 인스턴스는와 같은 사용자 지정 형식 지정 작업을 수행하는 메서드에 매개 변수로 전달됩니다 String.Format(IFormatProvider, String, Object[])
.