Estaba jugando con el método Datetime.ParseExact, y quiere un IFormatProvider ...
Funciona ingresando nulo, pero ¿qué hace exactamente?
c#
asp.net
iformatprovider
Moulde
fuente
fuente
Respuestas:
Además de la respuesta de Ian Boyd:
También
CultureInfo
implementa esta interfaz y se puede utilizar en su caso. Por lo tanto, podría analizar una cadena de fecha francesa, por ejemplo; podrías usarfuente
DateTime.ParseExact(string, string, IFormatProvider)
en su lugar, creo, como tal:DateTime.ParseExact("20160409 111559","yyyyMMdd HHmmss",CultureInfo.CurrentCulture)
DateTime dt = DateTime.Parse(yourDateInputString, ci);
Revise su respuesta.La
IFormatProvider
interfaz normalmente la implementa unaCultureInfo
clase, por ejemplo:CultureInfo.CurrentCulture
CultureInfo.CurrentUICulture
CultureInfo.InvariantCulture
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
La interfaz es una puerta de entrada para que una función obtenga un conjunto de datos específicos de una cultura de una cultura. Los dos objetos de referencia cultural comúnmente disponibles que
IFormatProvider
se pueden consultar son:DateTimeFormatInfo
NumberFormatInfo
La forma en que normalmente funcionaría es pedirle
IFormatProvider
alDateTimeFormatInfo
objeto que le dé un objeto:También existe el conocimiento interno de que
IFormatProvider
es probable que cualquier interfaz esté siendo implementada por una clase que desciendeCultureInfo
o desciendeDateTimeFormatInfo
, por lo que puede transmitir la interfaz directamente:Pero no hagas eso
Todo ese arduo trabajo ya ha sido escrito para ti:
Para obtener un
DateTimeFormatInfo
de unIFormatProvider
:Para obtener un
NumberFormatInfo
de unIFormatProvider
:El valor de
IFormatProvider
es que usted crea sus propios objetos de cultura. Siempre que implementenIFormatProvider
y devuelvan los objetos que se les solicitan, puede omitir las culturas integradas.También puede utilizarlo
IFormatProvider
como una forma de pasar objetos culturales arbitrarios, a través deIFormatProvider
. Por ejemplo, el nombre de dios en diferentes culturas.Esto permite que su
LordsNameFormatInfo
clase personalizada viaje dentro de unIFormatProvider
, y puede preservar el idioma.En realidad, nunca necesitarás llamar a
GetFormat
método deIFormatProvider
ti mismo.Siempre que lo necesite
IFormatProvider
, puede pasar unCultureInfo
objeto:fuente
Pasar un valor nulo como
IFormatProvider
no es la forma correcta de hacer esto. Si el usuario tiene un formato de fecha / hora personalizado en su PC, tendrá problemas para analizar y convertir a cadena. Acabo de corregir un error en el que alguien había pasado nulo como IFormatProvider al convertir a una cadena.En su lugar, deberías usar
CultureInfo.InvariantCulture
Incorrecto:
Correcto:
fuente
CultureInfo.InvariantCulture
lugar deCultureInfo.CurrentCulture
?null
pasará por defecto aCultureInfo.CurrentCulture
. Vea la llamada en la fuente de referencia , si sigue la cadena de llamadas, el nulo finalmente se reemplaza con loDateTimeFormatInfo.CurrentInfo
que es equivalente a lasCultureInfo.CurrentCulture
salidas.IFormatProvider proporciona información cultural al método en cuestión. DateTimeFormatInfo implementa IFormatProvider y le permite especificar el formato en el que desea que se muestre su fecha / hora. Se pueden encontrar ejemplos en las páginas relevantes de MSDN.
fuente
Puede ver aquí http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx
Vea la sección de comentarios y ejemplos allí.
fuente
IFormatProvider
no se usaIFormatProvider
.Consulte http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx para ver la API.
fuente
Por MSDN
.NET Framework incluye las siguientes tres implementaciones de IFormatProvider predefinidas para proporcionar información específica de la cultura que se utiliza para formatear o analizar valores numéricos y de fecha y hora:
NumberFormatInfo
clase, que proporciona información que se usa para dar formato a números, como la moneda, el separador de miles y los símbolos de separador decimal para una cultura particular. Para obtener información sobre las cadenas de formato predefinidas reconocidas por unNumberFormatInfo
objeto y utilizadas en operaciones de formato numérico, consulte Cadenas de formato numérico estándar y Cadenas de formato numérico personalizado.DateTimeFormatInfo
clase, que proporciona información que se utiliza para dar formato a fechas y horas, como los símbolos separadores de fecha y hora para una cultura en particular o el orden y formato de los componentes de año, mes y día de una fecha. Para obtener información sobre las cadenas de formato predefinidas reconocidas porDateTimeFormatInfo
objeto y utilizadas en operaciones de formato numérico, consulte Cadenas de formato de fecha y hora estándar y Cadenas de formato de fecha y hora personalizadas.CultureInfo
clase, que representa una cultura particular. SuGetFormat
método devuelve un objetoNumberFormatInfo
o una cultura específicaDateTimeFormatInfo
, dependiendo de si elCultureInfo
objeto se usa en una operación de formato o análisis que involucra números o fechas y horas..NET Framework también es compatible con el formato personalizado. Esto normalmente implica la creación de una clase de formato que implementa IFormatProvider e ICustomFormatter. Luego, una instancia de esta clase se pasa como parámetro a un método que realiza una operación de formateo personalizada, como
String.Format(IFormatProvider, String, Object[])
.fuente
los clase DateTimeFormatInfo implementa esta interfaz, por lo que le permite controlar el formato de sus cadenas DateTime.
fuente