我的数据库中有几个DateTime字段。 Normaly我刚刚在我的模型中创建了这个:
[Display(Name = "Downtime start")]
public DateTime? Downtime_start { get; set; }
注意:它必须是可以为空的。
所以这很好用。但问题是,它还显示了无处不在的秒数,这是令人讨厌的。
所以我不能通过在我的模型中进行一些解析来解决这个问题吗?像这样的东西?
private string Parsed_Downtime_start;
[Display(Name = "Downtime_start")]
public DateTime? Downtime_start
{
get
{
if (Parsed_Downtime_start != null)
{
return DateTime.Parse(Parsed_Downtime_start);
}
else
{
return null;
}
}
set
{
if (value != null)
{
Parsed_Downtime_start = value.Value.ToString("MM/dd/yyyy hh:mm tt");
}
else
{
Parsed_Downtime_start = null;
}
}
}
这并没有真正改变任何事情。但是,如果我以另一种方式执行此操作并将其作为字符串保存到DB并将其解析为DateTime,它可以正常工作。但我真的不想将DB中的DateTimes保存为字符串。
答案 0 :(得分:5)
尝试使用
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]
适用于 EditorFor 和 DisplayFor 帮助
答案 1 :(得分:0)
使用此属性时
Convert.ToDateTime(Downtime_start).ToLongDateString()
应该允许反转(保存到数据库),包括小时,秒和分钟。
答案 2 :(得分:0)
由于我不得不使用Javascript Datetimepciker插件来解决这个问题,因此解决了这个问题。 (https://github.com/xdan/datetimepicker)格式必须非常特别。
所以我最终创建了一个辅助方法。
namespace MvcHtmlHelpers
{
public static class MvcHtmlHelpers
{
public static string ToString(this DateTime inputDate, bool FixTime)
{
if (FixTime)
{
string returnString;
if (inputDate == DateTime.MinValue)
{
returnString = "N/A";
}
else
{
returnString = inputDate.ToShortDateString() + ' ' + inputDate.ToShortTimeString();
}
return returnString;
}
return inputDate.ToString();
}
}
}
我的表单有一个“查看阶段”和一个“编辑模式阶段”,由编辑按钮控制。 我正在重叠.Value.ToString(true)方法,以使用辅助方法正确格式化日期。
<section class="col col-4">
<label class="label">@Html.DisplayNameFor(model => model.Downtime_start)</label>
<label class="input edit-case">
<i class="icon-append fa fa-calendar"></i>
<input type="text" id="Downtime_start" value="@Model.Downtime_start.Value.ToString(true)">
</label>
<label class="input state-disabled view-case">
<i class="icon-append fa fa-calendar"></i>
<input type="text" id="lbl_Downtime_start" disabled="disabled" value="@Model.Downtime_start.Value.ToString(true)">
</label>
</section>