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

C# 为什么LocalTime显示服务器时间而不是浏览器时间?,c#,datetime,localtime,C#,Datetime,Localtime,我可能做错了什么,但不知道为什么。 我的数据库中有一个DateTime字段,保存UTC时间 我的服务器在美国,浏览器在欧洲 页面加载代码如下所示: DateTime t = DateTime.SpecifyKind((DateTime)rdr["startTime"], DateTimeKind.Utc); label1.Text = t.ToLocalTime().ToString(); 显示的时间是美国本地时间,而不是欧洲时间。我应该如何显示浏览器的本地时间 谢谢 一种技术是在客户端浏览器

我可能做错了什么,但不知道为什么。 我的数据库中有一个DateTime字段,保存UTC时间

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

页面加载代码如下所示:

DateTime t = DateTime.SpecifyKind((DateTime)rdr["startTime"], DateTimeKind.Utc);
label1.Text = t.ToLocalTime().ToString();
显示的时间是美国本地时间,而不是欧洲时间。我应该如何显示浏览器的本地时间


谢谢

一种技术是在客户端浏览器上使用JavaScript检测客户端时区偏移(以分钟为单位):

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

然后可以将其发送回服务器并存储在会话或cookie中,并用于抵消向其显示的UTC日期。或者,另一种技术是使用用户配置文件来指定其时区。

一种技术是在客户端浏览器上使用JavaScript检测客户端时区偏移(以分钟为单位):

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

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

本地时间是在您的服务器上执行的,而不是在浏览器上。 如果要在服务器端转换日期,必须获取用户所在的时区(欧洲至少有3个时区,如果计算夏季时间,则为6个)


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

在服务器上执行本地时间,而不是在浏览器上执行。 如果要在服务器端转换日期,必须获取用户所在的时区(欧洲至少有3个时区,如果计算夏季时间,则为6个)

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

因为代码是在服务器上执行的,所以应用的时区是服务器本地的时区是有意义的

以及他关于将UTC发送到浏览器的建议(如果浏览器可用,这很好,但并不总是一个选项),如果您使用的是.NET 3.5,您应该仔细研究一下。这将允许您在UTC和任意时区之间进行转换,包括历史更改。(时区不仅仅是“GMT+5”等)最大的困难是计算出用户实际所在的时区。通常,您可以使用JavaScript获取与UTC的当前偏移量,但这并不能为您提供一致获得正确偏移量所需的所有信息。迟早,您可能需要为每个用户设置他们所在的时区。

因为代码是在服务器上执行的,所以应用的时区是服务器本地的时区是有意义的


以及他关于将UTC发送到浏览器的建议(如果浏览器可用,这很好,但并不总是一个选项),如果您使用的是.NET 3.5,您应该仔细研究一下。这将允许您在UTC和任意时区之间进行转换,包括历史更改。(时区不仅仅是“GMT+5”等)最大的困难是计算出用户实际所在的时区。通常,您可以使用JavaScript获取与UTC的当前偏移量,但这并不能为您提供一致获得正确偏移量所需的所有信息。迟早,您可能需要为每个用户设置他们所在的时区。

我认为根据时间值在客户端浏览器中的时间在数据库中存储时间值是不明智的

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


出于这个原因,最好使用服务器时间(或者像其他人所说的那样,最好再次使用UTC)。

我认为根据时间在客户端浏览器中的时间在数据库中存储时间值是不明智的

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


因此,最好使用服务器时间(或者像其他人所说的那样,最好再次使用UTC)。

我的建议是始终使用UTC,特别是如果您的当地时间是夏令时/夏令时。使用UTC时,每个时间点都有一个唯一的值,并且很容易计算两个日期之间的时间。当你需要一个本地时间时,只需使用正确的查询或在客户端转换它。我的建议是始终使用UTC,特别是如果你的本地时间是夏令时/夏令时。使用UTC时,每个时间点都有一个唯一的值,并且很容易计算两个日期之间的时间。当你需要一个固定的时间时,只要使用正确的查询或者在客户端转换它就可以了。它应该是
警报((new Date()).getTimezoneOffset())您缺少一个括号。它应该是
警报((new Date()).getTimezoneOffset())