¿Cómo formato un DateTime en un formato diferente?

Tengo una cadena que representa una fecha en un formato determinado, que deseo formatear de manera diferente. Alguien me dijo que usara DateTime.(Try)ParseExact , así que lo hice:

 var dateString = "2016-02-26"; var formatString = "dd/MM/yyyy"; var parsedDate = DateTime.ParseExact(dateString, formatString, null); 

Verá, quiero formatear la fecha como dd/MM/yyyy , por lo 26/02/2016 . Sin embargo, este código arroja una FormatException:

La cadena no fue reconocida como un DateTime válido.

¿Cómo puedo formatear un DateTime de manera diferente?

En primer lugar, DateTime s no tiene formato. Un DateTime contiene un momento en el tiempo y una bandera que indica si ese momento es Local , Utc o Unspecified .

Estructura de fecha y hora

Observaciones

El tipo de valor DateTime representa las fechas y horas con valores que van desde 00:00:00 (medianoche), 1 de enero, 0001 Anno Domini (Era común) hasta 11:59:59 PM, 31 de diciembre de 9999 dC (CE) en el gregoriano calendario.

Los valores de tiempo se miden en unidades de 100 nanosegundos denominadas tics, y una fecha determinada es el número de tics desde la medianoche del 1 de enero de 0001 AD (CE) en el calendario GregorianCalendar (sin incluir ticks que se agregarían en segundos intercalares) . Por ejemplo, un valor de ticks de 31241376000000000L representa la fecha, viernes, 01 de enero, 0100 12:00:00 medianoche. Un valor de DateTime siempre se expresa en el contexto de un calendario explícito o predeterminado.

El único momento en que se formatea DateTime es cuando se genera su valor como una cadena.

La cadena de formato que proporciona a (Try)ParseExact es el formato en el que se encuentra la cadena de fecha (hora) a analizar . Consulte MSDN: Cadenas de formato de fecha y hora personalizadas para saber cómo puede escribir su propia cadena de formato.

Entonces, el código que está buscando para analizar esa cadena es esto, y de nuevo, asegúrese de que la cadena de formato coincida exactamente con el formato de la cadena de fecha de entrada:

 var dateString = "2016-02-26"; var formatString = "yyyy-MM-dd"; var parsedDate = DateTime.ParseExact(dateString, formatString, null); 

Ahora parsedDate tiene un valor de DateTime que puede mostrar en el formato deseado (y tenga en cuenta que tendrá que escapar de / , ya que se interpretará como “el carácter separador de fecha para la cultura actual”, como se explica en MSDN anterior ) enlace ):

 var formattedDate = parsedDate.ToString("dd\\/MM\\/yyyy"); 

Esto formateará la fecha en el formato deseado:

 26/02/2016 

Puedes usar esto para String fecha de String

 DateTime.ParseExact(dateString, format, provider); 

y para el valor del proveedor

 CultureInfo provider = CultureInfo.InvariantCulture; 

como se menciona en la documentación de Microsoft