0

このアプリケーションでは、管理者がレポートを表示できる UI にレポート モジュールがあります。管理者には、from_date と to_date を選択するオプションが与えられます。トランザクション中、ライブ データをいくつかのテーブルに保存します。これらはすべてコア テーブルとして使用できます。データは、UTC タイムゾーンでこれらのテーブルに保存されます。スケジューラを 30 分ごとに実行し、コア テーブルのデータを 1 日のトランザクション数、応答時間などのレポートに必要なものに変換します。管理者にとって、表示されるデータはブラウザのタイムゾーンに基づいている必要があります。管理者は複数のタイムゾーンに分散しています。データをどのように保存し、どのように取得するのですか? リクエストが送信されるたびに、値を計算することはできません。

4

2 に答える 2

0

トランザクションを UTC として保存することは問題なく、多くの場合、推奨される方法です。

TIMESTAMP WITH TIMEZONEコメントで提案されているように使用して保存すると、トランザクション データに適用される現地時間とタイムゾーンを知ることができるという追加の利点があります。それも問題ありませんが、それはあなたが求めたものではありません。

あなたが言った:

管理者にとって、表示されるデータはブラウザのタイムゾーンに基づいている必要があります。

これは、データベースの時刻が UTC で設定されているか、タイム ゾーン付きのローカル タイムで設定されているかに関係なく、レポートを表示しているユーザーのタイム ゾーンへの出力時にデータを変換する必要があることを意味すると解釈します。

しかし、あなたは次のようにも言いました:

リクエストが送信されるたびに、値を計算することはできません。

そうですね、すべての視聴者が潜在的に異なるデータを持っている可能性があるので、申し訳ありませんが、それはまさにあなたがそれをしなければならない方法です. レポートを生成するアプリケーション ロジックが何であれ、データのタイムスタンプをビューアーの現地時間に変換する必要があります。これは通常、データベースでは行われませんが、中間層のアプリケーション ロジックで行われます。データベースに対して直接レポートを生成する場合、一部のレポート エンジンには、レポート自体に関連付けられたコードまたはスクリプトでタイムスタンプを操作する機能があります。

結果がどうであれ、これらのレポートのどこか (おそらくフッター) にタイム ゾーンが出力されていることを確認する必要があります。人間は、明らかに異なるタイムゾーンにいるスーパーバイザーや顧客などにレポートを電子メールで出力するなどのことを行うことがよくあります。

于 2013-07-12T15:44:29.593 に答える