3 回答

TA貢獻1866條經驗 獲得超5個贊
到目前為止,所有答案的問題在于它們沒有考慮Prashant試圖實現的目標。如果夏令時更改前一天其系統的用戶的偏移量為+12并為第二天設置了提醒,則本應觸發該提醒的用戶的偏移量將改為+13。
這就是為什么您只能將當前偏移量用于當前發生的事情。盡管我與其他所有人都同意,但服務器端所有時間(除了可能僅用于顯示的時間)都應存儲在UTC中。

TA貢獻1821條經驗 獲得超5個贊
第一件事是確保數據位于哪個時區。我建議確保將您存儲的任何DateTime存儲在UTC時間中(使用DateTime.ToUniversalTime()來保存它)。
當要為用戶存儲提醒時,您將需要當前的UTC時間,添加或刪除用戶的時區差,然后將新時間轉換回UTC。這就是您要存儲在數據庫中的內容。
然后,當您要檢查要發送的提醒時,只需根據UTC時間在數據庫中查找要立即發送的提醒;本質上是獲得所有時間戳都在之前的提醒DateTime.Now.ToUniversalTime()。
更新一些實現細節:您可以從TimeZoneInfo.GetSystemTimeZones()方法中獲取時區列表;您可以使用這些時間顯示用戶的時區列表。如果Id從選定的時區存儲屬性,則可以從中創建一個TimeZoneInfo類實例,并為給定的本地日期/時間值計算UTC時間:
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("<the time zone id>");
// May 7, 08:04:00
DateTime userDateTime = new DateTime(2009, 5, 7, 8, 4, 0);
DateTime utcDateTime = userDateTime.Subtract(tzi.BaseUtcOffset);
- 3 回答
- 0 關注
- 821 瀏覽
添加回答
舉報