yyyy - iformatprovider decimal c#
¿Qué hace IFormatProvider? (8)
Además de la respuesta de Ian Boyd:
También CultureInfo
implementa esta interfaz y puede usarse en su caso. Por lo tanto, podría analizar una cadena de fecha francesa, por ejemplo; podrías usar
var ci = new CultureInfo("fr-FR");
DateTime dt = DateTime.ParseExact(yourDateInputString, yourFormatString, ci);
Estaba jugando con el método Datetime.ParseExact, y quiere un IFormatProvider ...
Funciona ingresando nulo, pero ¿qué es exactamente lo que hace?
Compruebe http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx para la API.
La clase DateTimeFormatInfo implementa esta interfaz, por lo que le permite controlar el formato de sus cadenas DateTime.
La interfaz IFormatProvider
normalmente la implementa una clase CultureInfo
, por ejemplo:
-
CultureInfo.CurrentCulture
-
CultureInfo.CurrentUICulture
-
CultureInfo.InvariantCulture
-
CultureInfo.CreateSpecificCulture("de-CA") //German (Canada)
La interfaz es una puerta de enlace de una función para obtener un conjunto de datos específicos de una cultura. Los dos objetos de cultura comúnmente disponibles por los que se puede consultar un IFormatProvider
son:
-
DateTimeFormatInfo
-
NumberFormatInfo
La forma en que normalmente funcionaría es pedirle a IFormatProvider
que le proporcione un objeto DateTimeFormatInfo
:
DateTimeFormatInfo format;
format = (DateTimeFormatInfo)provider.GetFormat(typeof(DateTimeFormatInfo));
if (format != null)
DoStuffWithDatesOrTimes(format);
También hay conocimiento interno de que cualquier interfaz IFormatProvider
probablemente esté siendo implementada por una clase que desciende de CultureInfo
, o desciende de DateTimeFormatInfo
, para que pueda transmitir la interfaz directamente:
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 hagas eso
Todo ese trabajo duro ya ha sido escrito para ti:
Para obtener un DateTimeFormatInfo
desde un IFormatProvider
:
DateTimeFormatInfo format = DateTimeFormatInfo.GetInstance(provider);
Para obtener un NumberFormatInfo
desde un IFormatProvider
:
NumberFormatInfo format = NumberFormatInfo.GetInstance(provider);
El valor de IFormatProvider
es que crees tus propios objetos de cultura. Siempre y cuando implementen IFormatProvider
y devuelvan los objetos que se les solicitan, puede omitir las culturas incorporadas.
También puede usar IFormatProvider
para pasar objetos de cultivo arbitrarios a través del IFormatProvider
. Ej. El nombre de dios en diferentes culturas
- Dios
- Dios
- Jehova
- Yahwe
- יהוה
- אהיה אשר אהיה
Esto permite que su clase LordsNameFormatInfo
personalizada viaje dentro de un IFormatProvider
, y puede preservar la expresión idiomática.
En realidad, nunca necesitará llamar GetFormat
método IFormatProvider
de IFormatProvider
usted mismo.
Siempre que necesite un IFormatProvider
puede pasar un objeto CultureInfo
:
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 atribución.
Pasar nulo como IFormatProvider
no es la forma correcta de hacerlo. Si el usuario tiene un formato de fecha / hora personalizado en su PC, tendrá problemas al analizar y convertir a cadena. Acabo de corregir un error por el cual alguien pasó nulo como IFormatProvider al convertir a cadena.
En su lugar, debe utilizar CultureInfo.InvariantCulture
Incorrecto:
string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", null);
Correcto:
string output = theDate.ToString("dd/MM/yy HH:mm:ss.fff", CultureInfo.InvariantCulture);
Por MSDN
.NET Framework incluye las siguientes tres implementaciones predefinidas de IFormatProvider para proporcionar información cultural específica que se utiliza para formatear o analizar valores numéricos y de fecha y hora:
- La clase
NumberFormatInfo
, que proporciona información que se utiliza para formatear números, como la moneda, el separador de miles y los símbolos de separador decimal para una cultura en particular. Para obtener información acerca de las cadenas de formato predefinidas reconocidas por un objetoNumberFormatInfo
y utilizadas en las operaciones de formateo numérico, vea Cadenas estándar de formato numérico y Cadenas de formato numérico personalizado. - La clase
DateTimeFormatInfo
, que proporciona información que se utiliza para formatear fechas y horas, como los símbolos separadores de fecha y hora para una cultura en particular o el orden y el formato de los componentes de año, mes y día de una fecha. Para obtener información acerca de las cadenas de formato predefinidas reconocidas por un objetoDateTimeFormatInfo
y utilizadas en las operaciones de formateo numérico, vea Cadenas estándar de formato de fecha y hora, y cadenas de formato de fecha y hora personalizadas. - La clase
CultureInfo
, que representa una cultura particular. Su métodoGetFormat
devuelve un objetoNumberFormatInfo
oDateTimeFormatInfo
específico delNumberFormatInfo
, dependiendo de si el objetoCultureInfo
se utiliza en una operación de formateo o análisis que involucra números o fechas y horas.
.NET Framework también es compatible con el formato personalizado. Esto generalmente implica la creación de una clase de formato que implementa tanto IFormatProvider como ICustomFormatter. A continuación, se pasa una instancia de esta clase como parámetro a un método que realiza una operación de formateo personalizada, como String.Format(IFormatProvider, String, Object[])
.
Puede ver aquí http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx
Vea las observaciones y la sección de ejemplos allí.
http://msdn.microsoft.com/en-us/library/system.iformatprovider.aspx 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 MSDN relevantes.