Pregunta

Yo estaba jugando con el Datetime.ParseExact método, y quiere un IFormatProvider...

Funciona insertando nulo, pero, ¿qué hace?

¿Fue útil?

Solución

Además de respuesta de Ian Boyd:

También CultureInfo implementa esta interfaz y se puede utilizar en su caso. Por lo que podría analizar una cadena de fecha francés, por ejemplo; usted podría utilizar

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

Otros consejos

El IFormatProvider interfaz se implementa normalmente para usted por una clase CultureInfo, por ejemplo:.

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

La interfaz es una puerta de entrada para una función para obtener un conjunto de datos específicos de la cultura de un cultivo. Los dos cultura comúnmente disponibles objetos que un DateTimeFormatInfo se puede consultar para son:

  • NumberFormatInfo
  • LordsNameFormatInfo

La forma en que normalmente se trabajaría a hacer las GetFormat para darle un objeto <=>:

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

También hay conocimiento interno que cualquier <=> interfaz probable es ejecutado por una clase que desciende desde <=> o desciende de <=>, por lo que podría emitir la interfaz directa:

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);

Pero no hacerlo

Todo ese trabajo duro ya se ha escrito para usted:

Para obtener una <=> de un <=>

DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);

Para obtener una <=> de un <=>

NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);

El valor de <=> es que permite crear sus propios objetos de cultivo. Mientras que implementan <=>, y los objetos que se les pide para el retorno, puede omitir la incorporada en las culturas.

También puede utilizar <=> una manera de transmitir la cultura arbitraria objetos - a través de la <=>. P.ej. el nombre de Dios en diferentes culturas

  • dios
  • Dios
  • Jehova
  • Yahwe
  • יהוה
  • אהיה אשר אהיה

Esto le permite a su costumbre paseo a lo largo de la clase <=> dentro de un <=>, y se puede preservar el idioma.

En realidad nunca tendrá que llamar <=> método de <=> mismo.

Siempre que necesite un <=> puede pasar un objeto <=>:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

endTime.ToString(CultureInfo.InvariantCulture);

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

Nota: : Cualquier código se libera en el dominio público. No se requiere la atribución.

Al pasar null como IFormatProvider no es la forma correcta de hacer esto. Si el usuario tiene un formato personalizado de fecha / hora en su PC podrás tener problemas en el análisis y conversión en cadena. Acabo ha corregido un error que alguien había pasado nulo como IFormatProvider al convertir a cadena.

En lugar usted debe utilizar CultureInfo.InvariantCulture

Incorrecto:

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

correcta:

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

Se puede ver aquí http://msdn.microsoft.com/ en-us / library / system.iformatprovider.aspx

Vea la sección de observaciones y el ejemplo allí.

IFormatProvider proporciona información a la cultura del procedimiento en cuestión. DateTimeFormatInfo implementa IFormatProvider, y le permite especificar el formato usted quiere que su fecha / hora para que aparezca en. se pueden encontrar ejemplos en las páginas relevantes de MSDN.

http://msdn.microsoft.com/en- es / library / system.iformatprovider.aspx para la API.

Por MSDN

El .NET Framework incluye los siguientes tres predefinidos IFormatProvider implementaciones para proporcionar a la cultura específica de la información que es utilizada en el formato o de análisis numéricos y valores de fecha y hora:

  1. El NumberFormatInfo clase, que proporciona la información que se utiliza para dar formato a números, tales como la moneda, separador de miles y el separador de decimales símbolos de una cultura en particular.Para obtener información sobre el formato predefinido cadenas reconocido por un NumberFormatInfo objeto y se utiliza en el formato numérico de las operaciones, vea Cadenas de Formato Numérico Estándar y Personalizados Cadenas de Formato Numérico.
  2. El DateTimeFormatInfo clase, que proporciona la información que se utiliza para dar formato a fechas y horas, tales como la fecha y la hora separador de símbolos de una cultura en particular o el orden y el formato de una fecha del año, el mes y el día de componentes.Para obtener información sobre el formato predefinido cadenas reconocido por un DateTimeFormatInfo objeto y se utiliza en el formato numérico de las operaciones, consulte el Estándar de Formato de Fecha y Hora y Cadenas de Fecha y Hora Personalizado Cadenas de Formato.
  3. El CultureInfo clase que representa a una cultura en particular.Su GetFormat método devuelve una cultura específica NumberFormatInfo o DateTimeFormatInfo objeto, dependiendo de si el CultureInfo objeto se utiliza en un formato o la operación de análisis que implica números o fechas y horas.

El .NET Framework también soporta el formato personalizado.Normalmente, esto implica la creación de un formato de la clase que implementa tanto IFormatProvider y ICustomFormatter.Una instancia de esta clase es que se pasa como parámetro a un método que realiza un formato personalizado de la operación, tales como String.Format(IFormatProvider, String, Object[]).

El DateTimeFormatInfo clase implementa esta interfaz, lo que le permite controlar el formato de sus cadenas de fecha y hora.?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top