在ASP.NET MVC Razor视图中显示本地日期/时间

7

我有一个ASP.NET MVC应用程序,使用Razor作为视图引擎。我需要向用户显示日期/时间。我的挑战是,模型上的DateTime属性是UTC时间。我希望将时间显示为用户的本地时间。目前,我的代码如下:

<div>
@if (Model.LastModifiedOnUTC.HasValue) {
  Html.Raw(Model.LastModifiedOnUTC.ToString());
}
else {
  <span>This record has not been updated</span>
}
</div>

我想将DateTime显示为"2015年2月11日星期三下午3:27"这样的格式,但我不确定如何实现。 当我尝试上述操作时,打印了一个空字符串,这对我来说没有任何意义。
谢谢您的帮助。

2
我认为最好在客户端完成此操作,因为本地时区已知。因此,您需要使用JavaScript,并且如何使用在这个问题中已经解释:https://dev59.com/0Gw15IYBdhLWcg3wkcqq - Martin Liversage
Rick Strahl最近在博客中发表了一篇关于这个话题的文章。他的文章中提到了从浏览器中获取用户默认时区并在服务器端计算正确时间的方法。请访问他的博客网址http://weblog.west-wind.com/posts/2015/Feb/10/Back-to-Basics-UTC-and-TimeZones-in-NET-Web-Apps,并滚动到“捕获Web用户的默认时区”一节。 - Craig W.
1
你能取消已接受的答案吗?这并不是正确的方法,因为它会检索服务器本地时间,而不是客户端的时间。这可能会让很多人困惑。 - Jean-Paul
2个回答

13

一种选择是使用 JavaScript。

在你的视图中

<time>@Model.LastModifiedOnUTC.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)<time>

JS(我的 JQuery 示例)

$("time").each(function (elem) {
        var utctimeval = $(this).html();
        var date = new Date(utctimeval);
        $(this).html(date.toLocaleString());
})

3
该代码对服务器的区域文化很敏感,因为“:”冒号可能会变成点号。请参见此处。请改用以下代码: <time>@Model.LastModifiedOnUTC.ToString("yyyy-MM-ddTHH:mm:ssZ", CultureInfo.InvariantCulture)<time>我之前也遇到过这个问题,并通过使用InvariantCulture进行了更正。 - Andriod

-12

您可以在Razor中使用以下代码

<div>
@if (Model.LastModifiedOnUTC.HasValue) {
Html.Raw(Model.LastModifiedOnUTC.ToLocalTime().ToString());
}
else {
<span>This record has not been updated</span>
}
</div>

20
部署网站后,该 ToLocalTime() 方法将UTC时间转换为服务器所在的时区,而非客户端浏览器所在的时区。 - Ashutosh B Bodake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接