2012-08-08 71 views
0

我有我的提醒服務使用UTC時間

德州源服務器中部時間上運行的Windows服務。

這將檢查所有活動的提醒和比較了用戶想要的提醒時間,併發出提醒,如果它與用戶所需要的時間相匹配。

方案

  1. 用戶從EST
  2. 用戶通過我的網站設置了一個提醒使用UI * 1:25 PM *
  3. 在提交時,我的C#的業務邏輯轉換這一次到UTC之前存儲在我的數據庫。這將成爲'18:25:00'
  4. 我的業務邏輯將會把所有主動提醒從DB
  5. 而對於提醒時間檢查當前UTC時間提醒設置時間diffrence是小於5分鐘,然後它會發送通知給該客戶。

這是我的邏輯是如何寫

DateTime CurrentDate = DateTime.Now.ToUniversalTime(); 
TimeSpan currentTime = DateTime.Now.ToUniversalTime().TimeOfDay; 

if (Reminder.DailyReminders.Any(x => currentTime.Subtract(x.ReminderTime).TotalMinutes < 5 
&& currentTime.Subtract(x.ReminderTime).TotalMinutes > 0)) 
    { 
     if (Reminder.ReminderMedhodID.Equals(1)) 
     _email.ComposeEmail(Reminder); 
    } 

我的問題是 * currentTime的 *總是1小時落後於用戶請求提醒時間,所以我提醒要出門1小時晚了。

注:currentTime的是從下面

TimeSpan currentTime = DateTime.Now.ToUniversalTime().TimeOfDay; 

我不知道這是否是處理這種需求的最佳方式。考慮到這是其中一種方式,可以幫助解決這個問題嗎?

感謝Peter的回答

任何一個可以幫助我如何把用戶輸入的時間與日光考慮

這是我迄今

public TimeSpan ConvertToUTCTime(string dateStr) 
     { 
      DateTime localDateTime = DateTime.Parse(dateStr); // Local .NET timeZone. 
      DateTime utcDateTime = localDateTime.ToUniversalTime(); 

      string clTimeZoneKey = TimeZone.CurrentTimeZone.StandardName; 
      TimeZoneInfo clTimeZone = TimeZoneInfo.FindSystemTimeZoneById(clTimeZoneKey); 
      DateTime clDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, clTimeZone); 
      if (clTimeZone.IsDaylightSavingTime(localDateTime)) 
      { 
       // Get DayLight local time in UTC 
       // Yet to be implemented 
      } 
      return clDateTime.TimeOfDay; 
     } 

我得到這個使用工作這 http://msdn.microsoft.com/en-us/library/system.globalization.daylighttime.aspx

+0

您的CurrentDate對象將需要客戶端的當前日期/時間才能進行計算,因爲您正在存儲客戶端的UTC。在上面的代碼中,您將通過DateTime獲取CurrentDate。現在,從服務器抓取。這就是爲什麼你總是一個小時。 – Steve 2012-08-08 18:07:10

+0

@Steve他在這兩種情況下轉換爲UTC,所以他應該在哪裏獲得時間。 – 2012-08-08 18:09:57

+0

1:25 pm EDT是17:25 UTC,而不是18:25。有人必須修正夏令時設置。 – 2012-08-08 18:19:12

回答

2

嗯......我們是在美國大部分地區都使用夏令時(儘管印第安納州有部分地區使用EST)?由於美國東部時間比美國東部時間早一個小時,因此您的邏輯是正確的。輸入(EST)不正確。

+0

根據文檔: – Steve 2012-08-08 18:21:16

+0

@Peter如何糾正我的輸入與日光並轉換爲UTC? – HaBo 2012-08-08 18:48:49