Después de investigar un poco, terminé configurando Thread
el 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 CurrentCulture
valor 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 CurrentCulture
configuració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 CurrentCulture
propiedad, 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 @shortDateLocalFormat
variable 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 Thread
la CurrentCulture
propiedad 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
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
ApplyFormatInEditMode = true
a la propiedad:[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
. Debería ser obvio, pero cuando estás todo el no-tiempo-de-residuos-copiar-pegar esa pista de IntelliSense podría ir más allá de su nariz como lo hizo la mía :)