Cómo analizar el formatting pnetworkingeterminado de date git en C #

¿Cómo se analiza el formatting pnetworkingeterminado de git a DateTime en C #? Según cuál es el formatting para el parámetro –date de la confirmación de git

El formatting de date pnetworkingeterminado de git se parece a Mon Jul 3 17:18:43 2006 +0200 .

En este momento no tengo control sobre la salida, esta cadena proviene de otra herramienta que imprimió la date y necesito analizarla.

No analizaría esto en DateTime , lo analizaría en DateTimeOffset porque tiene un valor de desplazamiento UTC dentro.

¿Por qué? Porque si lo analiza en DateTime , obtendrá un DateTime como Local y podría generar resultados diferentes para diferentes máquinas ya que pueden tener desplazamientos de zona horaria de ese momento.

Por ejemplo, estoy en Estambul y usamos la hora de Europa del Este que usa UTC + 02: 00. Si ejecuto el ejemplo de su código con el método ParseExact , obtendré el 07/03/2006 18:18:43 como hora Local .

¿Por qué? Porque el 3 de julio de 2006, mi zona horaria estaba en horario de verano, que es UTC + 03: 00. Es por eso que genera 1 hora de resultado enviado. Esa es la parte que lo hace ambiguo cuando lo analizas en DateTime .

 string s = "Mon Jul 3 17:18:43 2006 +0200"; DateTimeOffset dto; if (DateTimeOffset.TryParseExact(s, "ddd MMM d HH:mm:ss yyyy K", CultureInfo.InvariantCulture, DateTimeStyles.None, out dto)) { Console.WriteLine(dto); } 

Ahora tiene un DateTimeOffset como 07/03/2006 17:18:43 +02:00 . Todavía puede get la parte DateTime con su propiedad .DateTime pero su Kind será Unspecified en ese caso.

Pero, por supuesto, sugiero usar Noda Time, que puede resolver la rareza de DateTime.

Hasta ahora, la mejor cadena de formatting que he encontrado es ddd MMM d HH:mm:ss yyyy K

 DateTime date; DateTime.TryParseExact( gitDateString, "ddd MMM d HH:mm:ss yyyy K", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out date );