如何显示与最终用户实际时区相关的服务器时间?

时间:2011-09-12 17:16:47

标签: c# asp.net-mvc-3 datetime localization

目前,我的网站上有很多操作:

if (auction.StartTime.Value <= DateTime.Now)

然后在我的Web应用程序的_Layout.cshtml上,我使用:

显示服务器时间
<p id="time">@DateTime.Now.ToString("HH:mm")</p>

这正确显示了当前的服务器时间,但我想根据用户的位置显示此时间。当然,我可以这样做:

<p id="time">@DateTime.Now.ToGMT(-4).ToString("HH:mm")</p>

但这是maintanance的噩梦。我必须在任何地方设置这种GMT扩展方法。也许在.NET框架中有一些东西?

你会如何推荐我处理这个?

4 个答案:

答案 0 :(得分:1)

最重要的部分是确定用户的时区。根据站点的不同,这可能是硬编码的(例如,如果它仅针对单个时区)或用户登录后的部分设置。

一旦你知道时区是什么,那么像TimeZoneInfo.ConvertTimeFromUtc这样的东西可能有助于实际转换日期时间。

答案 1 :(得分:1)

使用this StackOverflow question方法将时区信息从用户的浏览器发送到您的服务器(不幸的是,时区信息不是浏览器流量的一部分,afaik)。

答案 2 :(得分:0)

您可以在第一个请求中将浏览器的当前时间嵌入隐藏字段(使用javascript GetDate()函数),然后在服务器上检索它。

答案 3 :(得分:0)

最简单的方法是以UTC格式发送未格式化的(不变文化格式)值,在客户端重新创建日期对象(即使用JavaScript),然后使用Globalize根据日期和时间正确设置格式根据当地文化规则(和时区,但这个规则将自动调整)。

更难的是需要在用户配置文件(或cookie)中存储时区信息,并强制用户首先选择有效的时区。或者,在客户端读取时区偏移量(JavaScript Date的对象getTimezoneOffset()函数),并在每个会话中将其发送到服务器(例如,通过Ajax请求)。但这不可靠(不同的时区可能具有相同的偏移现在但在不同日期切换夏令时)。