我有我的提醒服务使用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