如何正确地将日期时间格式从c#传递给数据库?

时间:2017-10-07 15:18:16

标签: c# asp.net-mvc datetime

我的模型中有日期时间的变量

    [Required]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-MM-dd HH:mm:ss}")]
    public DateTime Deadline { get; set; }

并尝试使用bootstrap3 datetimepicker在视图中选择日期和时间,然后将其保存到数据库中。

控制器是 enter image description here

现在一切正常,除了它在数据库中保存的日期不是我在视图中选择的日期。

例如,我在视图中选择10/09/2017 1:58 AM。如您所见,月份是10月,第9天。

Datetimepicker screenshot

但在我提交后,我在数据库中获得的价值是2017-09-10 01:58:00。当我尝试使用此值与当前日期时间进行比较时,我发现了这一点 Debugger screenshot

月份变为9,白天变为10。

脚本看起来像

<script type="text/javascript">
$(function () {
    $('#Deadline').datetimepicker({ minDate: moment(), format: format: 'yyyy-mm-dd hh:ii:ss' });
});
</script>

我花了几个小时但仍然无法找出这个问题背后的原因。请帮助我,并提前感谢您的任何建议或建议。

1 个答案:

答案 0 :(得分:0)

好的,最后我还是不知道将值从视图传递到数据库时会发生什么。

但是我确实发现我用于Deadline字段的HtmlHelper是 EditorFor(),它将此字段呈现为 datetime 类型。因此,无论我在数据注释或javascript中指定的格式如何,它始终在该文本框中显示MM / dd / yyyy hh:mm AM(/ PM),并错误地将值保存到数据库中。

现在,我将@type =“text”添加到EditorFor()中,以便将其呈现为类型文本。或者使用TextBoxFor()而不是EditorFor()。

现在看起来像:

 @Html.EditorFor(model => model.Deadline, new { htmlAttributes = new { @type = "text", @class = "form-control"} })

现在它做了我期望它做的事。