我有一个数据库视图,可以让我了解一些工作项的状态。例如,它获取开始日期和结束日期,然后根据GetDate()
返回给我一个“ Work Remaining
”类型的答案进行一些数学运算。
问题是,数据库服务器在美国,而我在澳大利亚。
所以,现在这里的时间是 7 月 20 日 19 时GetDate()
33 分,服务器上返回 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())
我知道,硬编码,但从本质上讲,这可以解决问题。
有没有办法以某种方式告诉服务器我的区域,并让它根据我的位置返回日期?