0

我有一个运行在我的 Windows 服务

德州起源服务器中央时间。

这将检查所有活动的提醒,并比较用户想要的提醒时间,如果它与用户所需的时间匹配,则发出提醒。

场景

  1. 用户来自 EST
  2. 用户通过我的网站使用 UI设置了 *下午 1:25 *的提醒
  3. 在提交时,我的 C# 业务逻辑将这个时间转换为 UTC,然后存储到我的数据库中。那将变成“18:25:00”
  4. 我的业务逻辑将从数据库中提取所有活动提醒
  5. 如果当前 UTC 时间提醒设置时间 差异小于 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;

我不确定这是否是处理此要求的最佳方式。考虑到这是其中一种方式,任何人都可以帮助解决这个问题吗?

感谢彼得的回答

任何人都可以帮助我如何在考虑日光的情况下占用用户输入时间

这是我到目前为止所拥有的

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得到了这个工作

4

1 回答 1

2

嗯...我们目前在美国大部分地区使用夏令时(尽管印第安纳州的某些部分确实/确实使用了 EST?)由于 EDT 比 EST 早一小时,您的逻辑是正确的。输入 (EST) 不正确。

于 2012-08-08T18:07:21.833 回答