2017-09-13 70 views
0

我正在嘗試創建一個允許用戶爲特定日期安排事件的系統。只有在考慮時區時才能處理保存日期?

在服務器端,我有一個SQL作業,每天在EST上午3:00運行。

在客戶端,用戶在日期選擇器中選擇日期。

我需要確保SQL作業可以查看用戶保存的日期並在用戶時區的任何一天執行操作。

我試過存儲以下(粗C#僞代碼):

DateTime scheduledDateUtc = ConvertToUTC(dateEnteredByUser.Date, usersTimezone).Date; 

然後我執行基於SQL作業下面的對比情況:

WHERE CONVERT(DATE, scheduled_date_utc) = CONVERT(DATE, GETUTCDATE()) 

這是失敗的一些邊緣案例,肯定是錯誤的,但我不知道什麼是正確的戰略。

此外,我不清楚我應該如何爲這些邊緣情況編寫單元測試。

謝謝!

+0

你並不需要擔心的時區。計算機本地時區設置將自動調整。 DateTime對象以UTC時間自動保存在每臺計算機上,並以UTC時間在PC和數據庫之間傳輸(如果不使用字符串)。所以不需要轉換。 – jdweng

+0

「失敗」是什麼意思?你當前的代碼產生了什麼錯誤? –

+1

@jdweng這取決於他在SQL中的列類型。 'DateTime'和'DateTime2'沒有時區信息,而DateTimeOffset呢。使用'DateTime'列時,用戶輸入應首先[轉換爲UTC](https://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx)。 – Romoku

回答

0

你確定你需要轉換爲UTC嗎?不用手動轉換爲UTC我會嘗試設置它像這樣

DateTime scheduledDateUtc = DateTime.SpecifyKind(dateEnteredByUser.Value, DateTimeKind.Utc);

+0

如果用戶接近更極端的時區,這可能會導致問題;即UTC + 12或UTC-11。 – user3722952

相關問題