Nota para los lectores: Varios comentaristas han señalado algunos problemas en esta respuesta (particularmente relacionados con la primera sugerencia). Consulte la sección de comentarios para obtener más información.
DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");
Esto le 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 formato de fecha y hora
ToString("yyyy-MM-ddTHH:mm:ssK")
para que esto funcionara (con el complemento jquery timeago que estaba usando).dt.ToString("s") + dt.ToString("zzz")
// 2013-12-05T07: 19: 04-08: 00DateTime.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 ISO 8601.fuente
DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern);
Sin embargo, dado que todo esto excluye la zona horaria, etc., es posible que no tenga más remedio que usar el formateador explícito, es decir"yyyy-MM-ddTHH:mm:ss.fffZ"
Z
con este aspecto:DateTime.UtcNow.ToString(c, CultureInfo.InvariantCulture)) => 2012-06-26T11:55:36
y no hay una resolución de milisegundos que sea muy buena, ya que las computadoras hacen una buena cantidad de tics por segundo.o
eso obtienes segundos de2012-06-26T11:55:36.1007668Z
significado36.1007668
, por lo que obtienes una resolución de hasta1/10^7
un segundo. De ISO8601: 2004If a decimal fraction is included, lower order time elements (if any) shall be omitted and the decimal fraction shall be divided from the integer part by the decimal sign [...] the comma (,) or full stop (.)
"s"
no tiene sentido porque: "" O "(u" o ")," R "(o" r ")," s "y" u ". Estas cadenas corresponden a cadenas de formato personalizado definidas por la cultura invariante. Producen representaciones en cadena de valores de fecha y hora que están destinados a ser idénticos en todas las culturas ".DateTime.Now.ToString("s", new CultureInfo(myCulture))
.Devuelve algo como 2008-04-10T06: 30: 00
UtcNow
obviamente devuelve una hora UTC para que no haya daño en:fuente
a + b
compila el mismo código intermedio questring.Concat(a, b)
(suponiendo que ayb son cadenas, por supuesto), por lo que no hay diferencia en el rendimiento o el consumo de memoria.Utilizar:
SALIDA
Fuentes:
Cadenas de formato de fecha y hora estándar (MSDN)
Cadenas de formato de fecha y hora personalizadas (MSDN)
fuente
string strLocalTimeAndOffset_custom = localTimeAndOffset.ToString("yyyy-MM-ddTHH:mm:ssK");
resultaría en:strLocalTimeAndOffset_custom: 2012-09-17T22:02:51-07:00
o
es un formato ISO-8601.=>
fuente
Puede obtener la "Z" ( ISO 8601 UTC ) con el siguiente código:
Aquí es por qué:
La ISO 8601 tiene algunos formatos diferentes:
DateTimeKind.Local
DateTimeKind.Utc
DateTimeKind.Unspecified
.NET nos proporciona una enumeración con esas opciones:
Nota : Si aplica la "utilidad de observación" de Visual Studio 2008 a toString ("o") , puede obtener resultados diferentes, no sé si es un error, pero en este caso tiene mejores resultados usando una variable String si estás depurando
Fuente: cadenas de formato de fecha y hora estándar (MSDN)
fuente
Si debe usar DateTime para ISO 8601, entonces ToString ("o") debería producir lo que está buscando. Por ejemplo,
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 dificultades comunes :
fuente
Sorprendido de que nadie lo sugirió:
El UniversalSortableDateTimePattern le consigue casi todo el camino a lo que quiere (que es más bien un RFC 3339 la representación).
Agregado: decidí usar los puntos de referencia que estaban en la respuesta https://stackoverflow.com/a/43793679/653058 para comparar cómo funciona esto.
tl: dr; está en el extremo costoso, pero todavía un poco más de medio milisegundo en mi vieja computadora portátil :-)
Implementación:
Resultados:
fuente
Yo solo usaría
XmlConvert
:Conservará automáticamente la zona horaria.
fuente
La mayoría de estas respuestas tienen milisegundos / microsegundos que claramente no son compatibles con ISO 8601. La respuesta correcta sería:
Referencias
fuente
NOTA: Dependiendo de la conversión que esté haciendo en su extremo, usará la primera línea (más parecida) o la segunda.
Asegúrese de aplicar el formato solo a la hora local, ya que "zzz" es la información de zona horaria para la conversión UTC.
fuente
- de MSDN
fuente
.ToString("s")
?Para convertir DateTime.UtcNow en 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 personalizado con DateTime, es importante recordar que necesita escapar de sus separadores usando comillas simples.
Lo siguiente devolverá la representación de cadena que deseaba:
fuente
Es interesante que el formato personalizado "aaaa-MM-ddTHH: mm: ssK" (sin ms) sea el método de formato más rápido.
También es interesante que el formato "S" sea lento en Classic y rápido en Core ...
Por supuesto, los números son muy cercanos, entre algunas filas la diferencia es insignificante (las pruebas con sufijo
_Verify
son las mismas que las que no tienen ese sufijo, demuestra la repetibilidad de los resultados)Código:
https://github.com/dotnet/BenchmarkDotNet fue utilizado
fuente
Usando Newtonsoft.Json, puedes hacer
Ejemplo: https://dotnetfiddle.net/O2xFSl
fuente
Si está desarrollando en SharePoint 2010 o superior, puede usar
fuente
.ToString("o")
o, mejor,$"My complicated string {dt:o}"
.Para formatear como 2018-06-22T13: 04: 16 que se puede pasar en el URI de un uso de API:
fuente
Como se mencionó en otra respuesta,
DateTime
tiene problemas por diseño.NodaTime
Sugiero usar NodaTime para administrar valores de fecha / hora:
Formateo
Entonces, para crear y formatear
ZonedDateTime
puede usar el siguiente fragmento de código:Para mí, el
NodaTime
código parece bastante detallado. Pero los tipos son realmente útiles. Ayudan a manejar los valores de fecha / hora correctamente.Newtonsoft.Json
fuente