我有我的提醒服務使用UTC時間
德州源服務器中部時間上運行的Windows服務。
這將檢查所有活動的提醒和比較了用戶想要的提醒時間,併發出提醒,如果它與用戶所需要的時間相匹配。
方案
- 用戶從EST
- 用戶通過我的網站設置了一個提醒使用UI * 1:25 PM *
- 在提交時,我的C#的業務邏輯轉換這一次到UTC之前存儲在我的數據庫。這將成爲'18:25:00'
- 我的業務邏輯將會把所有主動提醒從DB
- 而對於提醒時間檢查當前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
您的CurrentDate對象將需要客戶端的當前日期/時間才能進行計算,因爲您正在存儲客戶端的UTC。在上面的代碼中,您將通過DateTime獲取CurrentDate。現在,從服務器抓取。這就是爲什麼你總是一個小時。 – Steve 2012-08-08 18:07:10
@Steve他在這兩種情況下轉換爲UTC,所以他應該在哪裏獲得時間。 – 2012-08-08 18:09:57
1:25 pm EDT是17:25 UTC,而不是18:25。有人必須修正夏令時設置。 – 2012-08-08 18:19:12