いくつかの作業項目のステータスを取得するデータベースのビューがあります。たとえば、開始日と終了日を取得し、それに基づいていくつかの計算を行い、' ' タイプの回答GetDate()
を返します。Work Remaining
問題は、データベース サーバーが米国にあり、私がオーストラリアにいることです。
したがって、現在の時刻は 7 月 20 日の 19 時 33 分でありGetDate()
、サーバーでは 20 日の 02 時 33 分が返されます。
タイムゾーンはどのように扱うべきですか? ユーザー プロファイルにタイムゾーン フィールドを含める必要がありますか?クライアント側で時間を差し引いたり追加したりしますか? それに関する問題は、すべてが日付と時刻を操作する必要があることです。つまり、アプリケーションとレポートです。
たとえば、特定の作業の残り時間を返すビューがあります。GETDATE() を使用してこれを計算します。
ALTER VIEW [dbo].[vwSprintSummary] AS
SELECT
SprintId,
SprintName,
MIN(DateValue) AS FirstSprintDate,
MAX(DateValue) AS LastSprintDate,
SprintEndDate,
COUNT(DISTINCT PersonId) AS AssignedPeople,
COUNT(DISTINCT ProjectResourceId) AS AssignedRoles,
SUM(AssignedProductiveHours * CanBurnDown) AS Capacity,
SUM(CASE WHEN CAST(GETDATE() AS DATE) <= DateValue THEN AssignedProductiveHours* CanBurnDown ELSE 0 END) AS RemainingCapacity
FROM [vwSprintDailyBreakdown]
GROUP BY SprintName, SprintId, SprintStartDate, SprintEndDate
GO
どういうわけか、正しいタイムゾーンで回答を得ることができるように、GetDate() を 'DATEADD...' に変更する必要がありますか?
この場合、「修正」はに変更するGETDATE()
ことですDATEADD(HOUR, 17, GETDATE())
ハードコーディングされていることは知っていますが、本質的には問題を解決します。
どういうわけかサーバーに自分のゾーンを伝え、自分の場所に基づいて日付を返すようにする方法はありませんか?