public static DateTime GetDateTime(AlarmTime time, DateTime now, DateTime lastAlarm)
        {
            var date = now.Date.AddHours(time.Hours).AddMinutes(time.Minutes);

            if (date < lastAlarm || date.AddMinutes(5) < now )
            {
                date = date.AddDays(1);
            }

            return date;
        }
        private static bool CheckTime(AlarmTime time, DateTime now, DateTime lastAlarm)
        {
            // если прошло время звонка будильника
            // и от этого времени не прошло 5 минут
            // и будильник сегодня еще не звонил
            var date = GetDateTime(time, now, lastAlarm);

            return lastAlarm < date && date < now;
        }
        private void Alarm(AlarmTime[] alarms)
        {
            Logger.Info("ALARM!");

            if (alarms.Any(a => a.PlaySound))
            {
                PlaySound();
            }

            foreach (var alarm in alarms)
            {
                Logger.Info("Run event handlers: {0} ({1})", alarm.Name, alarm.Id);

                Guid alarmId = alarm.Id;
                Run(AlarmStartedForPlugins, x => x(alarmId));

                if (alarm.UserScript != null)
                {
                    Logger.Info("Run script: {0} ({1})", alarm.UserScript.Name, alarm.UserScript.Id);
                    Context.GetPlugin<ScriptsPlugin>().ExecuteScript(alarm.UserScript);
                }
            }

            Logger.Info("Run subscribed scripts");
            this.RaiseScriptEvent(x => x.AlarmStartedForScripts);
        }
 private static DateTime GetDate(AlarmTime time, DateTime now, DateTime lastAlarm)
 {
     var date = now.Date.AddHours(time.Hours).AddMinutes(time.Minutes);
     return date > lastAlarm ? date : date.AddDays(1);
 }