Exibir apenas data e sem hora

No MVC razor, estou colocando data atual no database assim ..

model.Returndate = DateTime.Now.Date.ToShortDateString(); 

Como o campo do database é um tipo de dados datetime e estou convertendo a data atual para o formato de string, isso não está funcionando .. como posso fazer isso? Eu estou fazendo o formato de string porque eu quero a data no formato mm / dd / aaaa e não no formato de hora mm / dd / aaaa hh: mm: ss ..

EDITAR:

No controlador eu tenho

 var model = new ViewModel(); model.ReturnDate = DateTime.Now; return PartialView("PartialView", model); 

Na vista parcial, tenho

 @Html.EditorFor(model => model.Returndate) 

Aqui é onde está exibindo a data como Data e Hora juntos … Eu quero apenas que a data seja exibida. Não é a hora. Espero que esta edição explique melhor.

Se o tipo de coluna for DateTime no SQL, ele armazenará um horário em que você passará um ou não.

Seria melhor salvar a data corretamente:

 model.ReturnDate = DateTime.Now; 

e depois formatá-lo quando você precisar exibi-lo:

 @Html.Label(Model.ReturnDate.ToShortDateString()) 

Ou se você estiver usando o EditorFor:

 @Html.EditorFor(model => model.ReturnDate.ToShortDateString()) 

ou

 @Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy")) 

Para adicionar uma propriedade ao seu modelo, adicione este código:

 public string ReturnDateForDisplay { get { return this.ReturnDate.ToString("d"); } } 

Então no seu PartialView:

 @Html.EditorFor(model => model.ReturnDateForDisplay) 

EDITAR:

Oi pessoal, só quero esclarecer para esta resposta que, pelo meu ditado “Se você estiver usando o EditorFor”, isso significa que você precisa ter um modelo EditorFor para o tipo de valor que você está tentando representar.

Modelos de editor são uma maneira legal de gerenciar controles repetitivos no MVC:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

Você pode usá-los para tipos ingênuos como String, como fiz acima; mas eles são especialmente ótimos para permitir que você crie um conjunto de campos de input para um tipo de dados mais complicado.

Apenas tive que lidar com este cenário sozinho – encontrei uma maneira muito fácil de fazer isso, basta anotar sua propriedade no modelo assim:

 [DataType(DataType.Date)] public DateTime? SomeDateProperty { get; set; } 

Ele irá esconder o botão de tempo do selecionador de data também.

Desculpe se esta resposta está um pouco atrasada;)

Isso funciona se você deseja exibir em um TextBox:

 @Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}") 

A data / hora na base de dados não será uma versão formatada . Será apenas a data / hora em si. Como você exibe essa data / hora quando você extrai o valor do database é um assunto diferente. Eu suspeito fortemente que você realmente só quer:

 model.Returndate = DateTime.Now.Date; 

ou possivelmente

 model.Returndate = DateTime.UtcNow.Date; 

Sim, se você observar o database usando o SQL Server Studio ou qualquer outra coisa, verá a meia-noite, mas isso é irrelevante e, ao buscar a data do database e exibi-la a um usuário, você pode aplicar o formato relevante .

EDIT: Em relação à sua pergunta editada, o problema não é com o modelo – é como você especifica a exibição. Você deveria usar algo como:

 @Html.EditorFor(model => model.Returndate.Date.ToString("d")) 

onde d é o especificador de formato de data e hora padrão para o padrão de data abreviada (o que significa que as configurações culturais atuais serão consideradas).

Essa é a parte que tenho dito repetidamente – que quando você exibe a data / hora para o usuário , é hora de formatá-lo como uma data sem hora.

EDIT: Se isso não funcionar, deve haver uma maneira de decorar o modelo ou visualizar com uma string de formato – ou algo parecido. Eu não sou realmente uma pessoa MVC, mas parece que deveria haver uma boa maneira de fazer isso declarativamente …

Você pode modificar seu ViewModel como abaixo:

 [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)] 

Você pode aplicar o formato de data e hora personalizado usando ToString como:

 DateTime.Now.Date.ToString("MM/dd/yyyy"); 

Outras leituras no padrão de formatos DateTime.ToString podem ser encontradas aqui e aqui .

Editar: após a edição da sua pergunta, assim como o outro sugeriu, você deve aplicar o formato de data na sua opinião:

 model.Returndate = DateTime.Now.Date; @Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy")) 

Eu não tenho certeza no Razor, mas em ASPX você faz:

  <%if (item.Modify_Date != null) {%> <%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%> <%} %> 

Deve haver algo similar no Razor. Espero que isso ajude alguém.

Se você tem um loop for como o abaixo.

Altere @ item.StartDate para @ item.StartDate.Value.ToShortDateString ()

Isso removerá o tempo caso você não possa anotar sua propriedade no modelo, como no meu caso.

  @foreach (var item in Model.TestList) {  } 
Type Start Date
@item.TypeName @item.StartDate.Value.ToShortDateString()

Você poderia simplesmente converter o datetime. Algo como:

 @Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate)) 

Eu tive alguns problemas com as outras soluções nesta página, então pensei em colocar isso em prática.

 @Html.TextBoxFor(m => m.EndDate, "{0:d}", new { @class = "form-control datepicker" }) 

Então você só precisa adicionar “{0: d}” no segundo parâmetro e você deve estar pronto.

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime BillDate { get; set; }

Agora, a data da sua fatura será exibida.

insira a descrição da imagem aqui