CSharp - 从服务器时间转换为用户时间( 处理标准时间和夏时制时间)

  显示原文与译文双语对照的内容

我正在使用. NET 3和 SQL Server 2008 ( r2 ) 开发一个网络应用程序。

我有一个日期时间对象,我想把它转换为用户时间。 现在转换为用户时间很简单;我有一些java脚本可以让用户从UTC中移除用户的偏移量。 我知道我的日期时间偏移到 UTC 。

我昨天发现的是,我的用户偏移会改变,如果他们在世界上的一个讨厌的区域。 这样就会造成一些时间和时间的错误。

现在我知道 C# 有一些实用工具可以转换成时区时间,但是它们真的处理了所有的daylights节省。

例如如果我有时间,10-10-2001::: 00如何将该时间设置为太平洋时间? 如果我有 6 -6-2004,我怎么才能把它变成太平洋时间?

因为卷的日期更改,它非常复杂,而且我想要一个不需要维护时区的通用解决方案。

我知道这是中的经典问题,但我找不到真正答案我的问题的。 从我所看到 C# 使用当前的年储蓄日期daylights来更改年的日期时间。 可能会导致一些错误。

感谢你的帮助。

时间: 原作者:

现在我知道 C# 有一些实用工具可以转换成时区时间,但是它们真的处理了所有的daylights节省。

TimeZoneInfo 是的,是 1 但是我不认为这就是你真正想要做的。

为什么要将 DateTime 存储在服务器时区的中? 大多数情况下,将它存储在UTC中是比较明智的。 除这里之外,如果你的服务器在观察夏时间的时区,则每年会有一个小时的模糊性。 ( 相同的本地时间发生两次。)

一旦你将它存储为 UTC,你应该将它作为UTC给你的Javascript客户机。 你说你有"一些java脚本,可以让用户从UTC中得到偏移量",那将取决于时间的准确。 例如我在英国,我的偏移有时是 0,有时是 +1小时。 如果将UTC传递回客户端,则可以从该UTC时间计算出本地时间。 除非你能从客户端获得一个实时准确的时区表示,否则你的服务器就不能做到这一点,这通常是一件棘手的事。

从我所看到 C# 使用当前的年储蓄日期daylights来更改年的日期时间。

同样,C# 本身在这里并不重要。 不清楚你的.NET 框架的哪一部分是- TimeZoneTimeZoneInfoDateTimeTimeZoneInfo 有历史数据,但是只有当你在支持它的操作系统版本上。


1 因为你可能会注意到。 它没有像TZDB那样多的历史数据,而且对于俄罗斯和纳米代表一些非常奇怪的表示。

原作者:
...