SQL Server 2008时区转换

时间:2012-07-04 09:18:36

标签: sql-server-2008 timezone utc

在我的网络应用程序中,所有日期值在传递到SQL数据库之前都会转换为UTC,然后只要它们在应用程序中显示,就会转换回本地时间。所以底线是数据库中的所有日期都是UTC。

在我开始报告开发之前,这很好用。 Crystal Reports没有能力(我可以检测到)进行时区转换,因此我需要在将值传递给报表之前在SQL中进行转换。

SQL Server似乎具有更有限的转换日期时间值的能力。我看到的唯一功能是SWITCHOFFSET。这个功能的问题在于它不是日光节省意识,这似乎是一个重大缺陷。在asp.net中,我可以传递带有时区的日期时间值,它会自动将其转换为UTC时间,同时考虑到任何所需的夏令时调整。

在SQL中,不是说SWITCHOFFSET (SomeDate,"Eastern Time")之类的东西,而是 我现在不得不说SWITCHOFFSET(SomeDate, "-4:00")。但是如果我从表中提取数据会发生什么呢?我要求3月份的所有数据,即夏令时开始的月份?无论如何,其中一些将是不正确的。我可以说-4:00或-5:00,但很明显,不是两者。

是否还有其他一些功能需要调整,坦率地说,如果SWITCHOFFSET不知道如何进行夏令时转换,那么{{1}}似乎已经成熟了。

1 个答案:

答案 0 :(得分:1)

我发现Crystal Reports有一个ShiftDateTime函数,它将检测用户的本地时区,然后从UTC转换日期。这取决于用户是否正确设置了他们的时区,我认为这在大多数人的计算机上是98%。