为什么LocalTime显示服务器时间而不是浏览器时间?

为什么LocalTime显示服务器时间而不是浏览器时间?

问题描述:

我可能做错了什么 - 但不知道为什么。 我有一个DateTime字段在我的DB保持UTC时间为什么LocalTime显示服务器时间而不是浏览器时间?

我的服务器在美国,浏览器在欧洲。

的pageLoad的代码是如下:

DateTime t = DateTime.SpecifyKind((DateTime)rdr["startTime"], DateTimeKind.Utc); 
label1.Text = t.ToLocalTime().ToString(); 

所显示的时间我得到的是美国本地时间,而不是欧洲。我应该怎么做才能显示浏览器的本地时间?

谢谢!

的一种技术是使用客户端浏览器上JavaScript来检测客户端时区偏移量(分钟):

alert((new Date()).getTimezoneOffset(); 

这可以然后被发送回服务器并存储在会话或一个cookie和使用以抵消显示给他们的UTC日期。或者,另一种技术是让用户配置文件指定他们的时区。

toLocalTime在您的服务器上执行,而不是在浏览器上执行。 如果你想转换服务器端的日期,你必须得到用户所在的时区(欧洲至少有3个时区,如果你计算夏令时,则有6个时间....)

一方法是将UTC时间发送到客户端,然后使用一些javascript将其转换为用户本地时间(JavaScript中的Date对象知道用户系统设置的是什么)

由于some wrote,代码正在在服务器上执行 - 因此,应用的时区是服务器本地的时区是合理的。

除了他向浏览器发送UTC的建议(当它可用时它很好,但并不总是一个选项),如果您使用的是.NET 3.5,则应该查看TimeZoneInfo。这将使您可以在UTC和任意时区之间进行转换,包括历史更改。 (时区的时区比“GMT + 5”等多很多)。最大的困难在于计算用户实际所处的时区。通常您可以通过JavaScript获得当前UTC的偏移量,但这并不能让您所有你需要的信息才能保持一致。迟早你可能必须有一个每个用户的设置,他们在哪个时区。

我不认为这是明智的存储时间值在您的数据库基于它是什么时候在客户端浏览器。

如果您在许多不同时区有很多客户端,并且存储的信息经过整理或共享 - 事件顺序将不正确。例如,格林威治标准时间10:16在美国东部时间10:30之前。

由于这个原因,最好使用服务器时间(或者如别人所说的那样更好 - 尝试和使用UTC)。

+0

我的建议是始终使用UTC,特别是当您的当地时间有夏令时/夏令时时。有了UTC,每个时间点都有独特的价值,并且很容易计算两个日期之间的时间。而当你想要一个loacal时间时,只需使用正确的查询或在客户端进行转换即可。 – some 2008-11-22 07:05:52