4

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

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

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

虽然在 SQL 中,而不是说类似

SWITCHOFFSET (SomeDate,"Eastern Time"),

我现在不得不说

SWITCHOFFSET(SomeDate, "-4:00"). 

但是,如果我从表中提取数据并要求提供夏时制开始的 3 月的所有数据,会发生什么情况?无论如何,其中一些是不正确的。我可以说 -4:00 或 -5:00,但显然不能同时说两者。

是否有其他功能可以对此进行调整,坦率地说,如果 SWITCHOFFSET 不知道如何进行夏令时转换,它似乎是半生不熟的。

4

2 回答 2

1

我能想到的唯一方法是:

  • 使用 C# 集成为此创建一个方法;)感谢天堂,您可以退回到该方法。

  • 使用 VIEWS 针对它们运行报告。无论如何总是一个好主意,因为它将报告(在您的直接控制之外)与数据库模式分离,这是一个实现细节。我通常有一个报告模式,其中包含报告的所有视图作为另一个记录的 API。

最后但同样重要的是,您可以尝试摆脱 SQL Access 并使用 OData API,但这是一些工作。

无论如何,视图可以使用您编写的方法来转换时间。

于 2012-07-04T09:49:28.373 回答
0

对于那些使用 SSRS Reports 的人,您可能能够检测到 SSRS 中的时区。有关更多信息,请参阅此处的帖子。

在 SSRS 中使用时区

于 2013-01-03T12:49:27.577 回答