yyyy válido valor valid reconocer recognized puede parseexact parsear parse not ejemplos convert como cadena c# datetime iformatprovider

válido - parsear datetime c#



¿Por qué DateTime.ParseExact(String, String, IFormatProvider) necesita IFormatProvider? (1)

¿Por qué necesitamos proporcionar un objeto IFormatProvider? ¿Cuál es el punto detrás de esto?

Permite opciones específicas de cultura. En particular:

  • El formato que use podría ser un formato estándar de fecha / hora, lo que significa diferentes patrones en diferentes culturas
  • Puede usar : o / en su patrón, lo que significa caracteres específicos de cultivo para el separador de fecha o el separador de fecha respectivamente
  • Al analizar los nombres de mes y día, estos claramente dependen de la cultura
  • La cultura también determina el calendario predeterminado, lo que afectará el resultado

Como ejemplo del último punto, considere la misma cadena y formato exactos, interpretados en la cultura de los EE. UU. O Arabia Saudita:

using System; using System.Globalization; class Test { static void Main() { CultureInfo us = new CultureInfo("en-US"); CultureInfo sa = new CultureInfo("ar-SA"); string text = "1434-09-23T15:16"; string format = "yyyy''-''MM''-''dd''T''HH'':''mm"; Console.WriteLine(DateTime.ParseExact(text, format, us)); Console.WriteLine(DateTime.ParseExact(text, format, sa)); } }

Cuando se analiza con la cultura estadounidense, se usa el calendario gregoriano, mientras que cuando se analiza con la cultura de Arabia Saudita, se usa el calendario Um Al Qura, donde 1434 es el año en el que estamos actualmente (mientras escribo esta respuesta).

Si estamos utilizando el método ParseExact para el análisis exacto de la fecha y hora usando un formato específico, ¿por qué necesitamos proporcionar un objeto IFormatProvider? ¿Cuál es el punto detrás de esto?

Por ejemplo:

DateTime.ParseExact(dateString, format, provider);

¿Por qué necesitamos el provider aquí?