Dado un objeto DateTime, ¿cómo obtengo una fecha ISO 8601 en formato de cadena?

Resuelto Iain asked hace 16 años • 0 respuestas

Dado:

DateTime.UtcNow

¿Cómo obtengo una cadena que represente el mismo valor en un formato compatible con ISO 8601 ?

Tenga en cuenta que ISO 8601 define varios formatos similares. El formato específico que estoy buscando es:

yyyy-MM-ddTHH:mm:ssZ
Iain avatar Sep 22 '08 20:09 Iain
Aceptado

Nota para los lectores: varios comentaristas han señalado algunos problemas en esta respuesta (relacionados particularmente con la primera sugerencia). Consulte la sección de comentarios para obtener más información.

// Do not use this
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz", CultureInfo.InvariantCulture);

Al utilizar un formato de fecha y hora personalizado , se obtiene una fecha similar a
2008-09-22T13:57:31.2311892-04:00 .

Otra forma es:

// Prefer this, to avoid having to manually define a framework-provided format
DateTime.UtcNow.ToString("o", CultureInfo.InvariantCulture);

que utiliza el estilo estándar de "ida y vuelta" (ISO 8601) para brindarle
2008-09-22T14:01:54.9571247Z .

Para obtener el formato especificado, puede utilizar:

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)
Wayne avatar Sep 22 '2008 14:09 Wayne

DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)debería darle lo que está buscando, ya que el especificador de formato "s" se describe como un patrón de fecha/hora ordenable; Cumple con la norma ISO 8601.

EDITAR: Para obtener el adicional Zal final como lo requiere el OP, use "o"en lugar de "s".

Simon Wilson avatar Sep 22 '2008 14:09 Simon Wilson
DateTime.UtcNow.ToString("s")

Devuelve algo como 2008-04-10T06:30:00

UtcNowobviamente devuelve una hora UTC por lo que no hay ningún daño en:

string.Concat(DateTime.UtcNow.ToString("s"), "Z")
Iain avatar Sep 22 '2008 13:09 Iain