Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理来自服务器和客户端的时区差异_C#_Asp.net_Datetime_Timezone - Fatal编程技术网

C# 如何处理来自服务器和客户端的时区差异

C# 如何处理来自服务器和客户端的时区差异,c#,asp.net,datetime,timezone,C#,Asp.net,Datetime,Timezone,我有一个小型web应用程序(.Net Framwrok 3.5,ASP),其中用户设置在服务器上自动执行操作的日期时间,但最近我发现,由于服务器和用户具有不同的时区,当用户选择执行操作的时间时,它在服务器端比预定的晚一个小时完成 这是由服务器和客户端的时区差异造成的 我正在寻找解决这个问题的最佳方法,我正在考虑下一个选项: 1.-在时间输入旁边提供时区的下拉列表(例如:UTC+1波塞尔、哥本哈根、巴黎;UTC+2..等)。 有没有办法通过编程获取此列表,或者必须自己编写代码 2.-做同样的事情,

我有一个小型web应用程序(.Net Framwrok 3.5,ASP),其中用户设置在服务器上自动执行操作的日期时间,但最近我发现,由于服务器和用户具有不同的时区,当用户选择执行操作的时间时,它在服务器端比预定的晚一个小时完成

这是由服务器和客户端的时区差异造成的

我正在寻找解决这个问题的最佳方法,我正在考虑下一个选项:

1.-在时间输入旁边提供时区的下拉列表(例如:UTC+1波塞尔、哥本哈根、巴黎;UTC+2..等)。 有没有办法通过编程获取此列表,或者必须自己编写代码

2.-做同样的事情,但在我的个人资料页面上,这样我可以存储值,但可能会出现用户从不注意设置正确值的情况

3.-由于某些浏览器脚本或cookie,从用户处获取时间偏移,这是我找到的关于它的最佳方法,但我不确定它的可靠性:

4.-有没有办法通过简单的C#指令来实现

5.-什么都不做,这是一种选择,不是最好的,因为这种细节确实重要,但我不会放弃它。

有很多方法可以解决这个问题。有些涉及JavaScript,有些涉及.NET库,如,还有一些内置到框架中

可能最简单的方法就是使用内置类。您可以通过调用创建时区的下拉列表。您可以使用
Id
DisplayName
属性来构建下拉列表,并存储所选
Id
,以便使用
TimeZoneInfo
的转换方法进行转换

如果您想要更精确的转换,您可能希望探索使用IANA时区而不是Windows时区。(详情请参见)

如果您不喜欢.Net提供的显示名称,或者需要本地化的时区名称,则可以使用该库而不是
TimeZoneInfo.DisplayName

你也可以考虑简化用户体验,有两个DoPrdOuts--一个列出世界上的国家,一个在那个国家选择时区。这使得只有一个时区的国家的情况变得非常简单,并减少了居住在多个时区国家的用户的选择

和我所说的一样,还有其他方法要考虑,比如在浏览器本身中执行所有的UTC到本地转换,并且只向服务器发送UTC。 关于试图通过JavaScript自动获取用户的时区,您应该认识到您链接到的CodeProject站点中的方法是有缺陷的,因为它将时区误认为是时区偏移。(更多地介绍了这一点)有,但它们并不完美。最好的建议是询问您的用户

最后,如果你想让你的UI变得非常有趣,你可以考虑使用一个基于地图的时区选择器来代替(或另外)一个下拉。我要考虑的两个问题是:

如果您有更具体的关注点,请考虑在StAdvExcel上查找现有问题。关于时区有很多。你也可以考虑看我的视频教程,在PultLaVIEW上,它涵盖了这个和许多其他相关的主题。

为什么不让客户端用UTC来发送服务器的时间呢?另外,moment.js非常适合处理时区您的意思是他应该知道他必须计算的+UTC?这不就像有下拉列表,但让他知道他的偏移量是多少吗?这个链接应该给你一些关于如何使用UTC时间而不是本地化时间的提示:如果你使用
new Date().getTime()
将时间发送到服务器,它将返回UTC时间戳。在服务器上,您只需假设它是UTC。UTC基本上是两端的方式。仅供参考,我最后在JS hidden字段中使用new Date()来获取客户端时间,并将其与机器本地时间进行比较,以便存储正确的日期时间