Dado un objeto DateTime, ¿cómo obtengo una fecha ISO 8601 en formato de cadena?
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
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)
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 Z
al final como lo requiere el OP, use "o"
en lugar de "s"
.
DateTime.UtcNow.ToString("s")
Devuelve algo como 2008-04-10T06:30:00
UtcNow
obviamente devuelve una hora UTC por lo que no hay ningún daño en:
string.Concat(DateTime.UtcNow.ToString("s"), "Z")