Skip to content

Instantly share code, notes, and snippets.

@jmserrano-dev
Created August 24, 2017 09:43
Show Gist options
  • Save jmserrano-dev/98e3e1e05ee473ccb1de5caaec810332 to your computer and use it in GitHub Desktop.
Save jmserrano-dev/98e3e1e05ee473ccb1de5caaec810332 to your computer and use it in GitHub Desktop.
// Check your expression cron with http://www.cronmaker.com/
// Added Nuget NCrontab
// Added Nuget NCrontab.Advanced
void Main()
{
var cronExpresions = new Dictionary<string, string>
{
{"Todos los días", "0 0 * * *"},
{"Todos los días laborables L-V", "0 0 * * 1-5"},
{"Cada semana (el lunes 00:00h)", "0 0 * * 1"},
{"Cada mes (último día del mes)", "59 23 L * *"}
};
//Recuperar usu horario de las Settings del usuario
var userTimeZoneIdSelected = "Central Standard Time";
//Obtener la fecha desde la expresión CRON del jobs
var dateExecuteJob = GetNextDateFromCronExpression(cronExpresions.ElementAt(0).Value);
//Obtener uso horario del usuario
var userTimeZone = TimeZoneInfo.FindSystemTimeZoneById(userTimeZoneIdSelected);
//Convertir fecha de ejecución con el usuario horario del usuario en UTC
var executeJobDateUTC = TimeZoneInfo.ConvertTime(dateExecuteJob, userTimeZone, TimeZoneInfo.Utc);
//Obtener fecha actual en UTC
var currentDateUTC = DateTime.UtcNow;
//Si la fecha actual (UTC) es mayor que la fecha de ejecución de Job
// => Ejecutar tarea
// => Sino saltarla
currentDateUTC.Dump("Current Date in UTC format");
executeJobDateUTC.Dump("Execute Job Date in UTC Format");
(currentDateUTC > executeJobDateUTC ? "Execting..." : "Stop!").Dump("Result");
GetAllTimeZones().Dump();
}
// Define other methods and classes here
DateTime GetNextDateFromCronExpression(string cronExpression)
{
var schedule = NCrontab.Advanced.CrontabSchedule.Parse(cronExpression);
return schedule.GetNextOccurrence(DateTime.UtcNow);
}
IEnumerable<TimeZoneInfo> GetAllTimeZones()
{
var timezones = TimeZoneInfo.GetSystemTimeZones();
foreach (var tz in timezones)
{
yield return tz;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment