繁体   English   中英

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

[英]How can I display server time in relation to the end users actual time zone?

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

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>

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

你会怎么建议我处理这个?

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

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

使用此StackOverflow问题可以将时区信息从用户的浏览器发送到您的服务器(不幸的是,时区信息不是浏览器流量的一部分,afaik)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM