¿por qué DateTime.ToString ("dd / MM / aaaa") me da dd-MM-aaaa?

155

Quiero que mi fecha y hora se convierta en una cadena que tenga el formato "dd / MM / aaaa"

Cada vez que lo convierto usando DateTime.ToString("dd/MM/yyyy"), obtengo en su dd-MM-yyyylugar.

¿Hay algún tipo de información cultural que tenga que configurar?

Disco duro
fuente
do DateTime.ToString ("dd / MM / aaaa");
jimplode
2
Lo hice, pero no funcionó, el problema no es la fecha, es el "-", quiero que sea un "/" como he especificado
Unidad de disco
77
use MM en lugar de mm - mm representa minutos y no meses.
Lloyd Powell
1
posible duplicado de Cómo formatear una fecha con barras en C #
Dzyann
La documentación de MSDN para DateTime.ToString es irremediablemente incorrecta: " Por ejemplo, la cadena de formato" MM / dd / aaaaHH: mm "muestra la cadena de fecha y hora en un formato fijo ... La cadena de formato usa" / "como separador de fecha independientemente de la configuración específica de la cultura " .
Coronel Panic

Respuestas:

243

La barra diagonal es un delimitador de fecha, por lo que utilizará el delimitador de fecha de cultura actual.

Si desea codificarlo para usar siempre una barra inclinada, puede hacer algo como esto:

DateTime.ToString("dd'/'MM'/'yyyy")
Bojan Bjelic
fuente
2
@spender: en algunas culturas lo son.
Daniel A. White
Gracias por tu rápida respuesta. Tienes razón. Te daré la respuesta correcta
Diskdrive
66
También puede usar este formato: dateTime.ToString (@ "aaaa \ / MM \ / dd")
base2
2
Escapar de la cadena de formato usando la barra diagonal inversa también funciona: DateTime.Now.ToString ("dd \\ / MM \\ / aaaa");
TomB
61

Pase CultureInfo.InvariantCulture como el segundo parámetro de DateTime, devolverá la cadena como lo desea, incluso en un formato muy especial:

DateTime.Now.ToString("dd|MM|yyyy", CultureInfo.InvariantCulture)

volverá: 28 | 02 | 2014

Liu Peng
fuente
Este código es más claro que en la respuesta aceptada (me refiero a CultureInfo agregado). Se ve al menos mejor que las barras de escape por apóstrofes.
Sergey
2
Definitivamente más fácil de leer que usar caracteres de escape. ¡Estoy un poco sorprendido de no haber sabido todo el tiempo que mis formatos de fecha se iban a sobrescribir!
salvaje
10

Agregar CultureInfo.InvariantCulturecomo argumento:

using System.Globalization;

...

var dateTime = new DateTime(2016,8,16);
dateTime.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);

Volveremos:

"16/08/2016"
Mikael Engver
fuente
si el desarrollador utiliza el método de cadena con algunas letras como M m ss, etc. obtendrá un resultado incorrecto con su solución, por ejemplo, Datetime.Now.ToString ("aaaa / dd / mm / mes", CultureInfo.InvariantCulture) no dará como resultado 2017/01 / 02 / Mes resultará 2017/01/02 / 2onth
Okan SARICA
@OkanSARICA si desea sufijar la fecha con "/ Month", debe hacerlo después del método ToString. DateTime.Now.ToString ("aaaa / MM / dd", CultureInfo.InvariantCulture) + "/ Month";
Mikael Engver
1

Si usa MVC, tablas, funciona así:

<td>@(((DateTime)detalle.fec).ToString("dd'/'MM'/'yyyy"))</td>
Maurico Bello
fuente