4

私のWebアプリでは、すべての日付値は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は半分焼き付けられているように見えるので、これを調整する他の関数はありますか。

4

2 に答える 2

1

私が考えることができる唯一の方法は次のとおりです。

  • C#統合を使用して、そのためのメソッドを作成します;)天に感謝します。

  • VIEWSを使用して、それらに対してレポートを実行します。とにかく、実装の詳細であるデータベーススキーマからレポート(直接制御の外部)を分離するため、常に良い考えです。私は通常、別の文書化されたAPIとしてレポートのすべてのビューを持つレポートスキーマを持っています。

最後になりましたが、SQLAccessを削除してODataAPIを使用することもできますが、それはある程度の作業です。

とにかく、ビューは時間を変換するためにプログラムした方法を使用できます。

于 2012-07-04T09:49:28.373 に答える
0

SSRSレポートを使用している場合は、SSRSでタイムゾーンを検出できる場合があります。詳細については、こちらの投稿を参照してください。

SSRSでのタイムゾーンの操作

于 2013-01-03T12:49:27.577 に答える