日期时间值的编辑器显示不正确的值

时间:2018-02-20 00:45:46

标签: c# asp.net-mvc nopcommerce

好的,这是我的编辑日期时间值:

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

在代码中显示AM时间为正确值:

<input id="TestimonialCreatedOn-visible" name="TestimonialCreatedOn-visible" value="20/02/2018 11:08:06 AM" data-role="datetimepicker" style="width: 100%;" class="k-input valid" role="combobox" aria-expanded="false" aria-disabled="false" aria-readonly="false" type="text">

但对于日期时间选择器,它显示PM:

enter image description here

有没有人知道为什么它没有显示AM也时间错了,它应该显示

晚上11:08而不是晚上9:38

干杯

  

更新:如果我用它来设置我的模型值   model.TestimonialCreatedOn = DateTime.Now;然后保存值   我的编辑器在数据库中存储了正确的时区值   虽然日期时间显示的时间不正确,但数据库仍然存在   编辑器。

     

现在,如果我将以下内容设置为utc model.TestimonialCreatedOn = DateTime.UtcNow;,则错误的值将存储在数据库中。

所以这是一个例子: 我已将模型值设置为此model.TestimonialCreatedOn = DateTime.UtcNow; 现在我的编辑器显示正确的时间:

enter image description here

但是如果我保存该值,我会在数据库中获得此​​值: 2018-02-19 22:30:00.000 你可以在这里看到:

enter image description here

所以时区不匹配,无论我使用哪种方法model.TestimonialCreatedOn = DateTime.UtcNow;model.TestimonialCreatedOn = DateTime.Now;

1 个答案:

答案 0 :(得分:0)

好的,所以@StephenMuecke指出我在正确的轨道上。

最初创建模型时,日期时间值必须使用日期时间utc,如model.TestimonialCreatedOn = DateTime.UtcNow;

然后在保存模型时我需要将时间转换为本地用户时间:

var createdOn = _dateTimeHelper.ConvertToUserTime(DateTime.SpecifyKind((DateTime)model.TestimonialCreatedOn, DateTimeKind.Utc));

日期时间助手_dateTimeHelper是一种nopcommerce服务,可以在构造函数中初始化,也可以使用EngineContext解析,如下所示:

var _dateTimeHelper = EngineContext.Current.Resolve<IDateTimeHelper>();

希望这有助于他人。谢谢Stephen Muecke

要转换回当地时间,您可以使用:

_dateTimeHelper.ConvertToUtcTime(DateTime.SpecifyKind((DateTime)model.TestimonialCreatedOn, DateTimeKind.Local))