2011-12-29 16 views
13

Estoy utilizando el siguiente código¿Por qué DisplayFormat con DataFormatString cambia "/" (barra diagonal) a "-" (guión)?

// Model 
[DisplayFormat(
    ApplyFormatInEditMode = true, 
    DataFormatString = "{0:dd/MM/yyyy}")] 
public DateTime StartDate { get; set; } 

// View 
@Html.EditorFor(model => model.StartDate) 

para formatear la StartDate pero el resultado es xx-xx-xxxx en lugar de xx/xx/xxxx. ¿Cómo puedo resolver esto y siempre usar el formato xx/xx/xxxx?

ACTUALIZACIÓN: Cambiar la cultura a en-US parece funcionar:

var culture = new CultureInfo(userCulture); 
System.Threading.Thread.CurrentThread.CurrentCulture = "en-US"; 
System.Threading.Thread.CurrentThread.CurrentUICulture = "en-US"; 

pero esto no es una solución porque puede estar usando una cultura diferente y todavía quiero mostrar la fecha en una forma diferente

Si el cultivo actual indica que la fecha debe mostrar dd-MM-yyyy, entonces usar DisplayFormat como arriba no tiene ningún efecto y las fechas no se muestran como dd/MM/yyyy.

+0

¿Qué quiere decir con "Puedo estar usando una cultura diferente y todavía quiero mostrar la fecha de una manera diferente"? –

+0

Imagine que el usuario actual usa culture "pt-PT", luego DisplayFormat cambiará a "dd-MM-yyyy" (cómo debería ser) cuando quiero mostrarlo como: "dd/MM/yyyy" – Dryadwoods

+0

Es un poco misterioso que, si la cultura de los usuarios dice que los guiones deberían ser los separadores, insistes en usar barras. –

Respuesta

25

Uso DataFormatString = @"{0:dd\/MM\/yyyy}" lugar. Como el / identifica un carácter que debe reemplazarse por el separador de fecha predeterminado para el cultivo actual, debe escaparse para poder usarlo como un literal en el formato.

De esta manera tiene un formato fijo en lugar de uno que usa dinámicamente el separador de fecha de la cultura actual.

Una alternativa para escapar el carácter / puede ser: DataFormatString = "{0:dd'/'MM'/'yyyy}"

+1

gracias, esto funciona en la máquina local, pero nuestro sitio web alojado en otro país, necesita el formato 'MM/dd/aaaa', sino que muestra el error de validación' El campo BeginDate debe ser una fecha., ¿Cómo puedo hacer cortar a aceptar el formato 'dd/MM/aaaa' – stom

0

¿Puede cambiarlo a DataFormatString = "{0:d}"

Eso te dará la pauta corta fecha de dd/mm/año

+0

Nop, sigue siendo el mismo resultado: P gracias de todos modos. – Dryadwoods

+0

que solo le puede dar 1 dígito por mes y día si es menor de 10 –

+0

qué pasa con DataFormatString = "{0: MM/dd/aaaa}" –

2

cambiar el formato de fecha corta del servidor' ajustes regionales a utilizar, por ejemplo, barras yyyy/MM/dd.
Esto resolvió el problema para mí.

+0

gracias por el comentario, pero esa no es una solución correcta ya que el servidor/granja/nube puede estar "proporcionando" varios proyectos diferentes O la aplicación web en cuestión puede ofrecer funcionalidades multiculturales. – Dryadwoods

Cuestiones relacionadas