我正在嘗試創建一個允許用戶爲特定日期安排事件的系統。只有在考慮時區時才能處理保存日期?
在服務器端,我有一個SQL作業,每天在EST上午3:00運行。
在客戶端,用戶在日期選擇器中選擇日期。
我需要確保SQL作業可以查看用戶保存的日期並在用戶時區的任何一天執行操作。
我試過存儲以下(粗C#僞代碼):
DateTime scheduledDateUtc = ConvertToUTC(dateEnteredByUser.Date, usersTimezone).Date;
然後我執行基於SQL作業下面的對比情況:
WHERE CONVERT(DATE, scheduled_date_utc) = CONVERT(DATE, GETUTCDATE())
這是失敗的一些邊緣案例,肯定是錯誤的,但我不知道什麼是正確的戰略。
此外,我不清楚我應該如何爲這些邊緣情況編寫單元測試。
謝謝!
你並不需要擔心的時區。計算機本地時區設置將自動調整。 DateTime對象以UTC時間自動保存在每臺計算機上,並以UTC時間在PC和數據庫之間傳輸(如果不使用字符串)。所以不需要轉換。 – jdweng
「失敗」是什麼意思?你當前的代碼產生了什麼錯誤? –
@jdweng這取決於他在SQL中的列類型。 'DateTime'和'DateTime2'沒有時區信息,而DateTimeOffset呢。使用'DateTime'列時,用戶輸入應首先[轉換爲UTC](https://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx)。 – Romoku