Después de investigar un poco, terminé configurando Threadel valor CurrentCulture para tener CultureInfo ("en-US") en el método de acción del controlador:
Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US")
Aquí hay algunas otras opciones si desea tener esta configuración en cada vista.
Sobre el CurrentCulturevalor de la propiedad:
El objeto CultureInfo que devuelve esta propiedad, junto con sus objetos asociados, determina el formato predeterminado para fechas, horas, números, valores de moneda, el orden de clasificación del texto, convenciones de mayúsculas y minúsculas y comparaciones de cadenas.
Fuente: MSDN CurrentCulture
Nota: La CurrentCultureconfiguración de propiedad anterior probablemente sea opcional si el controlador ya se está ejecutando con CultureInfo("en-US")o similar donde está el formato de fecha "MM/dd/yyyy".
Después de configurar la CurrentCulturepropiedad, agregue un bloque de código para convertir la fecha al "M/d/yyyy"formato en la vista:
@{
var shortDateLocalFormat = "";
if (Model.AuditDate.HasValue) {
shortDateLocalFormat = ((DateTime)Model.AuditDate).ToString("M/d/yyyy");
}
}
@shortDateLocalFormat
Por encima de la @shortDateLocalFormatvariable está formateada con ToString("M/d/yyyy")obras. Si ToString("MM/dd/yyyy")se usa, como lo hice primero, terminará teniendo cero problemas . También funciona como recomendado por Tommy ToString("d") . Realmente "d"significa "Patrón de fecha corta" y también se puede utilizar con diferentes formatos de cultura / idioma.
Supongo que el bloque de código de arriba también se puede sustituir por algún método de ayuda interesante o similar.
Por ejemplo
@helper DateFormatter(object date)
{
var shortDateLocalFormat = "";
if (date != null) {
shortDateLocalFormat = ((DateTime)date).ToString("M/d/yyyy");
}
@shortDateLocalFormat
}
se puede utilizar con esta llamada de ayuda
@DateFormatter(Model.AuditDate)
Actualización , descubrí que hay una forma alternativa de hacer lo mismo cuando se usa el método DateTime.ToString (String, IFormatProvider) . Cuando se utiliza este método, no es necesario utilizar Threadla CurrentCulturepropiedad de. Se CultureInfo("en-US")pasa como segundo argumento -> IFormatProvider al DateTime.ToString(String, IFormatProvider)método.
Método de ayuda 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