Asp.net mvc 修改模型中的每个DateTime实例(服务器时间到客户端时间)

Asp.net mvc 修改模型中的每个DateTime实例(服务器时间到客户端时间),asp.net-mvc,razor,Asp.net Mvc,Razor,有没有办法修改从控制器到视图的每个DateTime实例 我已经在UTC时区的服务器上保存了datetime。但在浏览器中,我需要在客户端时区中显示日期。 所以每次我必须手动转换客户端时区中的datetime: model.DateCreated = ConvertToClientTimeZone(model.DateCreated) 这不舒服。所以我想问一下自动转换的可能方法?您可以编写一个自定义HTML帮助程序: public static IHtmlString FormatDate(th

有没有办法修改从控制器到视图的每个DateTime实例

我已经在UTC时区的服务器上保存了datetime。但在浏览器中,我需要在客户端时区中显示日期。 所以每次我必须手动转换客户端时区中的datetime:

model.DateCreated = ConvertToClientTimeZone(model.DateCreated)

这不舒服。所以我想问一下自动转换的可能方法?

您可以编写一个自定义HTML帮助程序:

public static IHtmlString FormatDate(this HtmlHelper html, DateTime date)
{
    string result = ... format the date however you like
    return new HtmlString(result);
}
然后在视图中:

@Html.FormatDate(model.DateCreated)

如果您使用视图模型,还可以将时区转换逻辑放入映射功能中,将域模型转换为视图模型

也就是说,如果您正在使用AutoMapper,我认为可以配置AutoMapper,以便在映射日期时自动将UTC(以DB为单位)转换为客户端时区。这样可以减少忘记调用转换助手函数并向用户显示错误日期时间的可能性


不要忘记,您还必须将来自客户端的日期时间转换为DB(从视图模型到域模型)。

如何在视图中显示日期?(这感觉像是视图应该做的事情,而不是更改模型。)我像往常一样显示日期,通过将其格式化为字符串:@model.DateCreated.ToString(“dd.MM.yyyy”)——我会将
ConvertToClientTimeZone
放在那里,而不是放在模型中。毕竟,您只是在更改数据的显示方式。当我忘记在视图中添加ConvertToClientTimeZone时,问题就来了。因此,请确保您没有这样做,并确保您进行了相关的测试。更改模型不是正确的方法,IMO。当我忘记在视图中添加@Html.FormatDate时,问题就来了。另一种可能是使用视图模型,并在视图模型上设置日期格式。这是最正确的方法。如果您没有使用视图模型并直接将域实体传递给视图,则不应忘记调用帮助器。