我有一个运行在我的 Windows 服务
德州起源服务器中央时间。
这将检查所有活动的提醒,并比较用户想要的提醒时间,如果它与用户所需的时间匹配,则发出提醒。
场景
- 用户来自 EST
- 用户通过我的网站使用 UI设置了 *下午 1:25 *的提醒
- 在提交时,我的 C# 业务逻辑将这个时间转换为 UTC,然后存储到我的数据库中。那将变成“18:25:00”
- 我的业务逻辑将从数据库中提取所有活动提醒
- 如果当前 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得到了这个工作