Depois de algumas pesquisas, acabei definindo Thread
o valor de CurrentCulture para ter CultureInfo ("en-US") no método de ação do controlador:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
Aqui estão algumas outras opções se você quiser ter essa configuração em todas as visualizações.
Sobre o CurrentCulture
valor da propriedade:
O objeto CultureInfo que é retornado por esta propriedade, junto com seus objetos associados, determina o formato padrão para datas, horas, números, valores monetários, a ordem de classificação de texto, convenções de maiúsculas e minúsculas e comparações de strings.
Fonte: MSDN CurrentCulture
Nota: A CurrentCulture
configuração da propriedade anterior é provavelmente opcional se o controlador já estiver em execução com CultureInfo("en-US")
ou semelhante onde está o formato de data "MM/dd/yyyy"
.
Depois de definir a CurrentCulture
propriedade, adicione o bloco de código para converter a data para o "M/d/yyyy"
formato na visualização:
@{
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
}
}
@shortDateLocalFormat
Acima a @shortDateLocalFormat
variável é formatada com ToString("M/d/yyyy")
obras. Se ToString("MM/dd/yyyy")
for usado, como eu fiz primeiro, você acaba tendo problema zero . Também funciona como recomendado por Tommy ToString("d")
. Na verdade, "d"
significa “Padrão de data abreviada” e pode ser usado com diferentes formatos de cultura / idioma também.
Eu acho que o bloco de código acima também pode ser substituído por algum método auxiliar legal ou similar.
Por exemplo
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
pode ser usado com esta chamada de ajuda
@DateFormatter(Model.AuditDate)
Update , descobri que existe uma maneira alternativa de fazer a mesma coisa quando o método DateTime.ToString (String, IFormatProvider) é usado. Quando este método é usado, não há necessidade de usar Thread
a CurrentCulture
propriedade de. O CultureInfo("en-US")
é passado como segundo argumento -> IFormatProvider para o DateTime.ToString(String, IFormatProvider)
método.
Método auxiliar modificado:
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("d", new System.Globalization.CultureInfo("en-US"));
}
@shortDateLocalFormat
}
.NET Fiddle
No overload for method 'ToString' takes 1 arguments