Как правило, при работе с такими датами вы выполняете все свои вычисления в формате UTC и переключаетесь на местное время только тогда, когда пора (без каламбура) отображать результаты.Я предполагаю из вашего вопроса, что это централизованная база данных, которая управляет всеми задачами, и вам просто нужно, чтобы они выполнялись в правильном локальном времени?
if ( dateTimeUtc == DateTime.UtcNow )
{
// If your reminder needs to display the local time, pass it in:
var tzi = TimeZoneInfo.FindSystemTimeZoneById(TimeZneID1);
SendReminder(TimeZoneInfo.ConvertFromUtc(DateTime.UtcNow, tzi));
}
Обратите внимание, что DateTime.Now
находится в local время;Вы хотите DateTime.UtcNow
для согласованности во всех часовых поясах.
Еще одна вещь, о которой следует знать, это то, что вы запускаете свой планировщик задач каждые 15 минут, поэтому шансы на совпадение в 02:15:15 точно невелики,Как правило, вы хотите проверить, не всплыло ли время напоминания с момента последнего запуска :
var currentRun = DateTime.UtcNow;
foreach ( dateTimeUtc in GetReminderDateTimes() )
{
if ( dateTimeUtc > lastRun && dateTimeUtc <= currentRun )
{
}
}
lastRun = currentRun;