Pregunta Dado un objeto DateTime, ¿cómo obtengo una fecha ISO 8601 en formato de cadena?
Dado:
DateTime.UtcNow
¿Cómo obtengo una cadena que representa el mismo valor en un ISO 8601¿formato compatible?
Tenga en cuenta que ISO 8601 define una cantidad de formatos similares. El formato específico que estoy buscando es:
yyyy-MM-ddTHH:mm:ssZ
598
2017-09-22 13:56
origen
Respuestas:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Esto te da una fecha similar a 2008-09-22T13: 57: 31.2311892-04: 00.
Otra forma es:
DateTime.UtcNow.ToString("o");
que te da 2008-09-22T14: 01: 54.9571247Z
Para obtener el formato especificado, puede usar:
DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")
Opciones de formateo de DateTime
610
2017-09-22 14:00
DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)
debe darle lo que está buscando, ya que el especificador de formato "s" se describe como un patrón de fecha / hora ordenable; cumple con ISO 8601.
269
2017-09-22 14:06
DateTime.UtcNow.ToString("s")
Devuelve algo como 2008-04-10T06: 30: 00
UtcNow
obviamente devuelve un UTC tiempo para que no haya daño en:
string.Concat(DateTime.UtcNow.ToString("s"), "Z")
58
2017-09-22 13:59
Utilizar:
private void TimeFormats()
{
DateTime localTime = DateTime.Now;
DateTime utcTime = DateTime.UtcNow;
DateTimeOffset localTimeAndOffset = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime));
//UTC
string strUtcTime_o = utcTime.ToString("o");
string strUtcTime_s = utcTime.ToString("s");
string strUtcTime_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");
//Local
string strLocalTimeAndOffset_o = localTimeAndOffset.ToString("o");
string strLocalTimeAndOffset_s = localTimeAndOffset.ToString("s");
string strLocalTimeAndOffset_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");
//Output
Response.Write("<br/>UTC<br/>");
Response.Write("strUtcTime_o: " + strUtcTime_o + "<br/>");
Response.Write("strUtcTime_s: " + strUtcTime_s + "<br/>");
Response.Write("strUtcTime_custom: " + strUtcTime_custom + "<br/>");
Response.Write("<br/>Local Time<br/>");
Response.Write("strLocalTimeAndOffset_o: " + strLocalTimeAndOffset_o + "<br/>");
Response.Write("strLocalTimeAndOffset_s: " + strLocalTimeAndOffset_s + "<br/>");
Response.Write("strLocalTimeAndOffset_custom: " + strLocalTimeAndOffset_custom + "<br/>");
}
SALIDA
UTC
strUtcTime_o: 2012-09-17T22:02:51.4021600Z
strUtcTime_s: 2012-09-17T22:02:51
strUtcTime_custom: 2012-09-17T22:02:51Z
Local Time
strLocalTimeAndOffset_o: 2012-09-17T15:02:51.4021600-07:00
strLocalTimeAndOffset_s: 2012-09-17T15:02:51
strLocalTimeAndOffset_custom: 2012-09-17T22:02:51Z
Fuentes:
24
2017-09-17 22:10
Puedes obtener la "Z" (ISO 8601 UTC) con el siguiente código:
Dim tmpDate As DateTime = New DateTime(Now.Ticks, DateTimeKind.Utc)
Dim res as String = tmpDate.toString("o") '2009-06-15T13:45:30.0000000Z
Aquí es por qué:
El ISO 8601 tiene algunos formatos diferentes:
DateTimeKind.Local
2009-06-15T13:45:30.0000000-07:00
DateTimeKind.Utc
2009-06-15T13:45:30.0000000Z
DateTimeKind.Unspecified
2009-06-15T13:45:30.0000000
.NET nos proporciona una enumeración con esas opciones:
'2009-06-15T13:45:30.0000000-07:00
Dim strTmp1 As String = New DateTime(Now.Ticks, DateTimeKind.Local).ToString("o")
'2009-06-15T13:45:30.0000000Z
Dim strTmp2 As String = New DateTime(Now.Ticks, DateTimeKind.Utc).ToString("o")
'2009-06-15T13:45:30.0000000
Dim strTmp3 As String = New DateTime(Now.Ticks, DateTimeKind.Unspecified).ToString("o")
Nota: Si aplica Visual Studio 2008 "ver utilidad" a la toString ("o") Es posible que obtengas resultados diferentes, no sé si es un error, pero en este caso tienes mejores resultados al utilizar una variable String si estás depurando.
Fuente: Cadenas estándar de formato de fecha y hora (MSDN)
18
2017-09-17 14:31
System.DateTime.UtcNow.ToString("o")
=>
val it : string = "2013-10-13T13:03:50.2950037Z"
17
2017-10-13 13:05
Si debe usar DateTime en ISO 8601, ToString ("o") debería dar lo que está buscando. Por ejemplo,
2015-07-06T12:08:27
Sin embargo, DateTime + TimeZone puede presentar otros problemas como se describe en la publicación del blog DateTime y DateTimeOffset en .NET: buenas prácticas y peligros comunes:
DateTime tiene innumerables trampas que están diseñadas para dar los errores de código:
1.- Los valores de DateTime con DateTimeKind.Unspecified son malas noticias.
2.- DateTime no se preocupa por UTC / Local al hacer comparaciones.
3.- Los valores DateTime no conocen cadenas de formato estándar.
4.- Analizar una cadena que tiene un marcador UTC con DateTime no garantiza un tiempo UTC.
17
2017-07-06 16:11
Yo solo usaría XmlConvert
:
XmlConvert.ToString(DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);
Preservará automáticamente la zona horaria.
15
2018-06-02 15:19
Para convertir DateTime.UtcNow a una representación de cadena de aaaa-MM-ddTHH: mm: ssZ, puede usar el método ToString () de la estructura DateTime con una cadena de formato personalizada. Al usar cadenas de formato personalizadas con DateTime, es importante recordar que debe escapar de sus separadores utilizando comillas simples.
Lo siguiente devolverá la representación de cadena que deseaba:
DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", DateTimeFormatInfo.InvariantInfo)
8
2017-11-26 21:55
La mayoría de estas respuestas tienen milisegundos / microsegundos, lo que claramente no es compatible con ISO 8601. La respuesta correcta sería:
System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssK");
// or
System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK");
Referencias
8
2017-12-05 17:11