hora - obtener fecha del sistema c#
Mostrar solo fecha y sin tiempo (9)
Esto funciona si quieres mostrar en un TextBox:
@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
En la maquinilla de afeitar MVC, estoy poniendo la fecha actual en la base de datos de esta manera ...
model.Returndate = DateTime.Now.Date.ToShortDateString();
Como el campo de la base de datos es un tipo de datos de fecha y hora y estoy convirtiendo la fecha actual al formato de cadena, esto no funciona ... ¿cómo puedo hacer esto? Estoy haciendo el formato de cadena porque quiero la fecha en formato mm / dd / aaaa y no en formato de hora mm / dd / aaaa hh: mm: ss ..
EDITAR:
En el controlador que tengo
var model = new ViewModel();
model.ReturnDate = DateTime.Now;
return PartialView("PartialView", model);
En la vista parcial, tengo
@Html.EditorFor(model => model.Returndate)
Aquí es donde se muestra la fecha como Fecha y hora juntas ... Solo quiero que se muestre la fecha. No es el momento. Espero que esta edición explique mejor.
La fecha / hora en la base de datos no será una versión formateada . Simplemente será la fecha / hora misma. Cómo se muestra esa fecha / hora cuando se extrae el valor de la base de datos es una cuestión diferente. Sospecho fuertemente que realmente solo quieres:
model.Returndate = DateTime.Now.Date;
o posiblemente
model.Returndate = DateTime.UtcNow.Date;
Sí, si miras la base de datos usando SQL Server Studio o lo que sea, ahora verás la medianoche, pero eso es irrelevante, y cuando sacas la fecha de la base de datos y la muestras a un usuario, puedes aplicar el formato relevante .
EDIT: con respecto a su pregunta editada, el problema no está en el modelo, sino en cómo especifica la vista. Deberías usar algo como:
@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
donde d
es el especificador de formato de fecha y hora estándar para el patrón de fecha corta (lo que significa que tendrá en cuenta la configuración cultural actual).
Eso es lo que he estado diciendo repetidamente: que cuando se muestra la fecha / hora al usuario , ese es el momento de formatearlo como una fecha sin tiempo.
EDITAR: si esto no funciona, debería haber una forma de decorar el modelo o la vista con una cadena de formato, o algo así. No soy realmente una persona MVC, pero parece que debería haber una buena forma de hacerlo declarativamente ...
No estoy seguro en Razor pero en ASPX lo haces:
<%if (item.Modify_Date != null)
{%>
<%=Html.Encode(String.Format("{0:D}", item.Modify_Date))%>
<%} %>
Debe haber algo similar en Razor. Espero que esto ayude a alguien.
Puede aplicar formato de fecha y hora personalizada usando ToString
como:
DateTime.Now.Date.ToString("MM/dd/yyyy");
Lectura adicional sobre el patrón de formatos DateTime.ToString
se puede encontrar here y here .
Editar: después de la edición de su pregunta, al igual que otras sugerencias, debe aplicar el formato de fecha a su vista:
model.Returndate = DateTime.Now.Date;
@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
Puede modificar su ViewModel de la siguiente manera:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
Si el tipo de columna es DateTime en SQL, almacenará una hora en la que pase uno o no.
Sería mejor guardar la fecha correctamente:
model.ReturnDate = DateTime.Now;
y luego formatee cuando necesite mostrarlo:
@Html.Label(Model.ReturnDate.ToShortDateString())
O si está utilizando EditorFor:
@Html.EditorFor(model => model.ReturnDate.ToShortDateString())
o
@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))
Para agregar una propiedad a su modelo, agregue este código:
public string ReturnDateForDisplay
{
get
{
return this.ReturnDate.ToString("d");
}
}
Luego en su PartialView:
@Html.EditorFor(model => model.ReturnDateForDisplay)
EDITAR:
Hola chicos, solo quiero aclarar para esta respuesta que al decir ''Si estás usando EditorFor'', eso significa que necesitas tener una plantilla EditorFor para el tipo de valor que estás tratando de representar.
Las plantillas de editor son una forma genial de administrar controles repetitivos en MVC:
http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/
Puedes usarlos para tipos ingenuos como String como lo hice anteriormente; pero son especialmente geniales para permitirle crear una plantilla de un conjunto de campos de entrada para un tipo de datos más complicado.
Si tiene un bucle for como el siguiente.
Cambie @ item.StartDate a @ item.StartDate.Value.ToShortDateString ()
Esto eliminará el tiempo en caso de que no pueda anotar su propiedad en el modelo como en mi caso.
<table>
<tr>
<th>Type</th>
<th>Start Date</th>
</tr>
@foreach (var item in Model.TestList) {
<tr>
<td>@item.TypeName</td>
<td>@item.StartDate.Value.ToShortDateString()</td>
</tr>
}
</table>
Simplemente podría convertir la fecha y hora. Algo como:
@Convert.ToString(string.Format("{0:dd/MM/yyyy}", Model.Returndate))
Simplemente tuve que lidiar con este escenario yo mismo, encontré una forma realmente fácil de hacerlo, simplemente anote su propiedad en el modelo de esta manera:
[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }
También ocultará el botón de tiempo del selector de fecha.
Lo siento si esta respuesta es un poco tarde;)