下面的示例創建一個以[tempdb中]是有48小時的日期的測試表。
如果我的服務器在GMT時間運行,我可以將存儲在表格中的所有日期轉換爲GMT,方法是使用偏移量將常量歸零。
-- Just playing around
use tempdb;
go
-- A simple table with dates
create table my_birthday
(
-- simple id
my_id int identity(1,1) primary key,
-- store date with offset
my_date datetimeoffset
);
-- Data with GMT offset
declare @cnt int = -48;
while @cnt < 49
begin
insert into my_birthday (my_date) values (DATEADD(HH, [email protected], SYSDATETIMEOFFSET()));
set @cnt += 1;
end;
-- Pick todays data
select * from my_birthday
where datediff(d, my_date, switchoffset(CONVERT(datetimeoffset, '2013-12-12'), '+00:00')) = 0
看看輸出結果,我們在12-11上得到5個額外的日子,因爲我在美國東部時區,在天結束時鬆了5天。但我們仍然只有24小時是正確的。
簡而言之,您需要此解決方案的datetimeoffset數據類型和switchoffset()函數。
你也存儲用戶的地理位置?如果您將GMT(格林威治標準時間)與用戶位置結合使用,您可以在午夜時間將其發送給他們。 –
你一定需要知道用戶的地理位置或時區。你是否在你的用戶表中存儲了某個地方? – Shiva
我們有一個法案國家,我們用它來確定他們的位置。有些也有賬單狀態,但不是全部。 –