C# 如何处理来自服务器和客户端的时区差异
我有一个小型web应用程序(.Net Framwrok 3.5,ASP),其中用户设置在服务器上自动执行操作的日期时间,但最近我发现,由于服务器和用户具有不同的时区,当用户选择执行操作的时间时,它在服务器端比预定的晚一个小时完成 这是由服务器和客户端的时区差异造成的 我正在寻找解决这个问题的最佳方法,我正在考虑下一个选项: 1.-在时间输入旁边提供时区的下拉列表(例如:UTC+1波塞尔、哥本哈根、巴黎;UTC+2..等)。 有没有办法通过编程获取此列表,或者必须自己编写代码 2.-做同样的事情,但在我的个人资料页面上,这样我可以存储值,但可能会出现用户从不注意设置正确值的情况 3.-由于某些浏览器脚本或cookie,从用户处获取时间偏移,这是我找到的关于它的最佳方法,但我不确定它的可靠性: 4.-有没有办法通过简单的C#指令来实现 5.-什么都不做,这是一种选择,不是最好的,因为这种细节确实重要,但我不会放弃它。有很多方法可以解决这个问题。有些涉及JavaScript,有些涉及.NET库,如,还有一些内置到框架中 可能最简单的方法就是使用内置类。您可以通过调用创建时区的下拉列表。您可以使用C# 如何处理来自服务器和客户端的时区差异,c#,asp.net,datetime,timezone,C#,Asp.net,Datetime,Timezone,我有一个小型web应用程序(.Net Framwrok 3.5,ASP),其中用户设置在服务器上自动执行操作的日期时间,但最近我发现,由于服务器和用户具有不同的时区,当用户选择执行操作的时间时,它在服务器端比预定的晚一个小时完成 这是由服务器和客户端的时区差异造成的 我正在寻找解决这个问题的最佳方法,我正在考虑下一个选项: 1.-在时间输入旁边提供时区的下拉列表(例如:UTC+1波塞尔、哥本哈根、巴黎;UTC+2..等)。 有没有办法通过编程获取此列表,或者必须自己编写代码 2.-做同样的事情,
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()来获取客户端时间,并将其与机器本地时间进行比较,以便存储正确的日期时间