yyyymmdd yyyy parseexact parse formato fecha example convert c# datetime parsing

c# - yyyy - ¿Por qué no puede DateTime.Parse analizar la fecha UTC



formato fecha datetime c# (9)

¿Por qué no puede analizar esto?

DateTime.Parse("Tue, 1 Jan 2008 00:00:00 UTC")


Debe especificar el formato:

DateTime date = DateTime.ParseExact( "Tue, 1 Jan 2008 00:00:00 UTC", "ddd, d MMM yyyy HH:mm:ss UTC", CultureInfo.InvariantCulture);


No es un formato válido, sin embargo, "Tue, 1 de enero de 2008 00:00:00 GMT" es.

La documentación dice así:

Una cadena que incluye información de zona horaria y cumple con ISO 8601. Por ejemplo, la primera de las siguientes dos cadenas designa el Tiempo Universal Coordinado (UTC); el segundo designa el tiempo en un huso horario siete horas antes que el UTC:

2008-11-01T19: 35: 00.0000000Z

Una cadena que incluye el designador GMT y se ajusta al formato de hora RFC 1123. Por ejemplo:

Sáb, 01 Nov 2008 19:35:00 GMT

Una cadena que incluye la fecha y la hora junto con la información de compensación de zona horaria. Por ejemplo:

03/01/2009 05:42:00 -5: 00


No estoy seguro de por qué, pero puede ajustar DateTime.ToUniversalTime en una prueba / captura y lograr el mismo resultado en más código.

Buena suerte.


No puede analizar esa cadena porque "UTC" no es un designador de zona horaria válida.

La hora UTC se denota agregando una "Z" al final de la cadena de tiempo, por lo que su código de análisis debe verse así:

DateTime.Parse("Tue, 1 Jan 2008 00:00:00Z");

Del artículo de Wikipedia sobre ISO 8601

Si la hora está en UTC, agregue una ''Z'' directamente después del tiempo sin espacio. ''Z'' es el designador de zona para el desplazamiento UTC cero. "09:30 UTC" se representa por lo tanto como "09: 30Z" o "0930Z". "14:45:15 UTC" sería "14: 45: 15Z" o "144515Z".

La hora UTC también se conoce como hora ''Zulu'', ya que ''Zulu'' es la palabra del alfabeto fonético de la OTAN para ''Z''.


Para analizar correctamente la cadena dada en la pregunta sin cambiarla, use lo siguiente:

using System.Globalization; string dateString = "Tue, 1 Jan 2008 00:00:00 UTC"; DateTime parsedDate = DateTime.ParseExact(dateString, "ddd, d MMM yyyy hh:mm:ss UTC", CultureInfo.CurrentCulture, DateTimeStyles.AssumeUniversal);

Esta implementación usa una cadena para especificar el formato exacto de la cadena de fecha que se está analizando. El parámetro DateTimeStyles se usa para especificar que la cadena dada es una cadena de tiempo universal coordinada.


Simplemente reemplace "UTC" con "GMT" - simple y no rompe las fechas formateadas correctamente:

DateTime.Parse("Tue, 1 Jan 2008 00:00:00 UTC".Replace("UTC", "GMT"))


Solo usa eso:

var myDateUtc = DateTime.SpecifyKind(DateTime.Parse("Tue, 1 Jan 2008 00:00:00"), DateTimeKind.Utc); if (myDateUtc.Kind == DateTimeKind.Utc) { Console.WriteLine("Yes. I am UTC!"); }

Puede probar este código usando el compilador en línea c #:

http://rextester.com/

Espero que ayude.


Suponiendo que usa el formato "o" para su fecha y hora para tener "2016-07-24T18: 47: 36Z", hay una manera muy simple de manejar esto.

Llamar a DateTime.Parse("2016-07-24T18:47:36Z").ToUniversalTime() .

¿Qué sucede cuando llamas a DateTime.Parse("2016-07-24T18:47:36Z") un DateTime configurado en la zona horaria local. Entonces lo convierte a la hora local.

El ToUniversalTime() cambia a un UTC DateTime y lo convierte a la hora UTC.


o use AdjustToUniversal DateTimeStyle en una llamada a

DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles)