Created
August 24, 2017 09:43
-
-
Save jmserrano-dev/98e3e1e05ee473ccb1de5caaec810332 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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