目前,我的网站上有很多操作:
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框架中有一些东西?
你会如何推荐我处理这个?
答案 0 :(得分:1)
最重要的部分是确定用户的时区。根据站点的不同,这可能是硬编码的(例如,如果它仅针对单个时区)或用户登录后的部分设置。
一旦你知道时区是什么,那么像TimeZoneInfo.ConvertTimeFromUtc这样的东西可能有助于实际转换日期时间。
答案 1 :(得分:1)
使用this StackOverflow question方法将时区信息从用户的浏览器发送到您的服务器(不幸的是,时区信息不是浏览器流量的一部分,afaik)。
答案 2 :(得分:0)
您可以在第一个请求中将浏览器的当前时间嵌入隐藏字段(使用javascript GetDate()函数),然后在服务器上检索它。
答案 3 :(得分:0)
最简单的方法是以UTC格式发送未格式化的(不变文化格式)值,在客户端重新创建日期对象(即使用JavaScript),然后使用Globalize根据日期和时间正确设置格式根据当地文化规则(和时区,但这个规则将自动调整)。
更难的是需要在用户配置文件(或cookie)中存储时区信息,并强制用户首先选择有效的时区。或者,在客户端读取时区偏移量(JavaScript Date的对象getTimezoneOffset()函数),并在每个会话中将其发送到服务器(例如,通过Ajax请求)。但这不可靠(不同的时区可能具有相同的偏移现在但在不同日期切换夏令时)。