2012-08-08 118 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