por que DateTime.ToString ("dd / MM / aaaa") me fornece dd-MM-aaaa?

155

Desejo que meu datetime seja convertido em uma string no formato "dd / MM / aaaa"

Sempre que eu o converter usando DateTime.ToString("dd/MM/yyyy"), eu recebo dd-MM-yyyy.

Existe algum tipo de informação de cultura que eu precise definir?

Unidade de disco
fonte
do DateTime.ToString ("dd / MM / aaaa");
jimplode
2
Eu fiz isso, não funcionou, o problema não é as datas, é o "-", eu quero que seja uma "/" como se eu tivesse especificado
Diskdrive
7
use MM em vez de mm - mm representa minutos e não meses.
Lloyd Powell
1
possível duplicata de Como formatar uma data com barras em C # #
Dzyann
A documentação do MSDN para DateTime.ToString está irremediavelmente errada: " Por exemplo, a seqüência de formato" MM / dd / aaaaHH: mm "exibe a seqüência de datas e horas em um formato fixo ... A seqüência de caracteres de formato usa" / " separador de datas, independentemente das configurações específicas da cultura. "
Coronel Panic

Respostas:

243

Barra é um delimitador de data, portanto, ele usará o delimitador de data de cultura atual.

Se você deseja codificá-lo para usar sempre a barra, você pode fazer algo assim:

DateTime.ToString("dd'/'MM'/'yyyy")
Bojan Bjelic
fonte
2
@ spender - em algumas culturas eles são.
Daniel A. White
Obrigado pela sua resposta rápida. Você está certo. Vou te dar a resposta correta
Diskdrive
6
Você também pode usar este formato: dateTime.ToString (@ "aaaa \ / MM \ / dd")
base2
2
Escapar da cadeia de caracteres de formato usando barra invertida também funciona: DateTime.Now.ToString ("dd \\ / MM \\ / aaaa");
TomB
61

Passe CultureInfo.InvariantCulture como o segundo parâmetro de DateTime, ele retornará a string conforme o desejado, mesmo em um formato muito especial:

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

retornará: 28 | 02 | 2014

Liu Peng
fonte
Este código é mais claro do que na resposta aceita (refiro-me ao CultureInfo). Parece pelo menos melhor do que escapar de barras por apóstrofos.
Sergey
2
Definitivamente mais fácil de ler do que usar caracteres de escape. Estou um pouco chocado por não saber o tempo todo que meus formatos de data seriam substituídos!
Savage
10

Adicione CultureInfo.InvariantCulturecomo argumento:

using System.Globalization;

...

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

Retornará:

"16/08/2016"
Mikael Engver
fonte
se o desenvolvedor usar o método tostring com algumas letras como M mss etc., obterá um resultado errado com sua solução, por exemplo, Datetime.Now.ToString ("aaaa / dd / mm / mês", CultureInfo.InvariantCulture) não resultará em 2017/01 / 02 / mês resultará em 01/02/2017 / 2onth
Okan SARICA
@OkanSARICA, se você quiser sufocar a data com "/ Month", faça-o após o método ToString. DateTime.Now.ToString (”aaaa / MM / dd”, CultureInfo.InvariantCulture) + ”/ Month”;
Mikael Engver
1

Se você usa MVC, tables, funciona assim:

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