A schedule library with similar schedule settings as a task scheduler.
Scheduling resolution options are with the lowest being Day.: Once Daily Weekly Monthly And for each one can schedule more granular such as every x (day of week) etc.
Sample usage :
// WeekDays
var start = new DateTime(2010, 6, 3);
var end = new DateTime(2018, 8, 13);
var days = new[] { DayOfWeek.Sunday, DayOfWeek.Saturday };
var weekendDays = new WeeklyOccurrence(start, end, days, 2);
Visualize the output:
Range from 2010-06-03 12:00:00 AM to 2010-08-13 12:00:00 AM
| -3300 | -3299 | -3298 | -3297 | -3296 | -3295 | -3294 | -3293 | -3292 | -3291 | -3290 | -3289 | -3288 | -3287 | -3286 | -3285 | -3284 | -3283 | -3282 | -3281 | -3280 | -3279 | -3278 | -3277 | -3276 | -3275 | -3274 | -3273 | -3272 | -3271 | -3270 | -3269 | -3268 | -3267 | -3266 | -3265 | -3264 | -3263 | -3262 | -3261 | -3260 | -3259 | -3258 | -3257 | -3256 | -3255 | -3254 | -3253 | -3252 | -3251 | -3250 | -3249 | -3248 | -3247 | -3246 | -3245 | -3244 | -3243 | -3242 | -3241 | -3240 | -3239 | -3238 | -3237 | -3236 | -3235 | -3234 | -3233 | -3232 | -3231 | -3230 | -3229 |
|2010-06-03|2010-06-04|2010-06-05|2010-06-06|2010-06-07|2010-06-08|2010-06-09|2010-06-10|2010-06-11|2010-06-12|2010-06-13|2010-06-14|2010-06-15|2010-06-16|2010-06-17|2010-06-18|2010-06-19|2010-06-20|2010-06-21|2010-06-22|2010-06-23|2010-06-24|2010-06-25|2010-06-26|2010-06-27|2010-06-28|2010-06-29|2010-06-30|2010-07-01|2010-07-02|2010-07-03|2010-07-04|2010-07-05|2010-07-06|2010-07-07|2010-07-08|2010-07-09|2010-07-10|2010-07-11|2010-07-12|2010-07-13|2010-07-14|2010-07-15|2010-07-16|2010-07-17|2010-07-18|2010-07-19|2010-07-20|2010-07-21|2010-07-22|2010-07-23|2010-07-24|2010-07-25|2010-07-26|2010-07-27|2010-07-28|2010-07-29|2010-07-30|2010-07-31|2010-08-01|2010-08-02|2010-08-03|2010-08-04|2010-08-05|2010-08-06|2010-08-07|2010-08-08|2010-08-09|2010-08-10|2010-08-11|2010-08-12|2010-08-13|
| | |2010-06-05|2010-06-06| | | | | | | | | | | | |2010-06-19|2010-06-20| | | | | | | | | | | | |2010-07-03|2010-07-04| | | | | | | | | | | | |2010-07-17|2010-07-18| | | | | | | | | | | | |2010-07-31|2010-08-01| | | | | | | | | | | | |
//Every Second tuesday of the month
var everySecondTuesday = new MonthlyOccurrence(DateTime.MinValue, DateTime.MaxValue
, EVERY_MONTH_OF_THE_YEAR
, new WeekOfMonth[] { WeekOfMonth.Second }
, new DayOfWeek[] { DayOfWeek.Tuesday});
Visualize the output:
Range from 2018-12-31 12:00:00 AM to 2019-12-31 12:00:00 AM
| -167 | -166 | -165 | -164 | -163 | -162 | -161 | -160 | -159 | -158 | -157 | -156 | -155 | -154 | -153 | -152 | -151 | -150 | -149 | -148 | -147 | -146 | -145 | -144 | -143 | -142 | -141 | -140 | -139 | -138 | -137 | -136 | -135 | -134 | -133 | -132 | -131 | -130 | -129 | -128 | -127 | -126 | -125 | -124 | -123 | -122 | -121 | -120 | -119 | -118 | -117 | -116 | -115 | -114 | -113 | -112 | -111 | -110 | -109 | -108 | -107 | -106 | -105 | -104 | -103 | -102 | -101 | -100 | -99 | -98 | -97 | -96 | -95 | -94 | -93 | -92 | -91 | -90 | -89 | -88 | -87 | -86 | -85 | -84 | -83 | -82 | -81 | -80 | -79 | -78 | -77 | -76 | -75 | -74 | -73 | -72 | -71 | -70 | -69 | -68 | -67 | -66 | -65 | -64 | -63 | -62 | -61 | -60 | -59 | -58 | -57 | -56 | -55 | -54 | -53 | -52 | -51 | -50 | -49 | -48 | -47 | -46 | -45 | -44 | -43 | -42 | -41 | -40 | -39 | -38 | -37 | -36 | -35 | -34 | -33 | -32 | -31 | -30 | -29 | -28 | -27 | -26 | -25 | -24 | -23 | -22 | -21 | -20 | -19 | -18 | -17 | -16 | -15 | -14 | -13 | -12 | -11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 |
|2018-12-31|2019-01-01|2019-01-02|2019-01-03|2019-01-04|2019-01-05|2019-01-06|2019-01-07|2019-01-08|2019-01-09|2019-01-10|2019-01-11|2019-01-12|2019-01-13|2019-01-14|2019-01-15|2019-01-16|2019-01-17|2019-01-18|2019-01-19|2019-01-20|2019-01-21|2019-01-22|2019-01-23|2019-01-24|2019-01-25|2019-01-26|2019-01-27|2019-01-28|2019-01-29|2019-01-30|2019-01-31|2019-02-01|2019-02-02|2019-02-03|2019-02-04|2019-02-05|2019-02-06|2019-02-07|2019-02-08|2019-02-09|2019-02-10|2019-02-11|2019-02-12|2019-02-13|2019-02-14|2019-02-15|2019-02-16|2019-02-17|2019-02-18|2019-02-19|2019-02-20|2019-02-21|2019-02-22|2019-02-23|2019-02-24|2019-02-25|2019-02-26|2019-02-27|2019-02-28|2019-03-01|2019-03-02|2019-03-03|2019-03-04|2019-03-05|2019-03-06|2019-03-07|2019-03-08|2019-03-09|2019-03-10|2019-03-11|2019-03-12|2019-03-13|2019-03-14|2019-03-15|2019-03-16|2019-03-17|2019-03-18|2019-03-19|2019-03-20|2019-03-21|2019-03-22|2019-03-23|2019-03-24|2019-03-25|2019-03-26|2019-03-27|2019-03-28|2019-03-29|2019-03-30|2019-03-31|2019-04-01|2019-04-02|2019-04-03|2019-04-04|2019-04-05|2019-04-06|2019-04-07|2019-04-08|2019-04-09|2019-04-10|2019-04-11|2019-04-12|2019-04-13|2019-04-14|2019-04-15|2019-04-16|2019-04-17|2019-04-18|2019-04-19|2019-04-20|2019-04-21|2019-04-22|2019-04-23|2019-04-24|2019-04-25|2019-04-26|2019-04-27|2019-04-28|2019-04-29|2019-04-30|2019-05-01|2019-05-02|2019-05-03|2019-05-04|2019-05-05|2019-05-06|2019-05-07|2019-05-08|2019-05-09|2019-05-10|2019-05-11|2019-05-12|2019-05-13|2019-05-14|2019-05-15|2019-05-16|2019-05-17|2019-05-18|2019-05-19|2019-05-20|2019-05-21|2019-05-22|2019-05-23|2019-05-24|2019-05-25|2019-05-26|2019-05-27|2019-05-28|2019-05-29|2019-05-30|2019-05-31|2019-06-01|2019-06-02|2019-06-03|2019-06-04|2019-06-05|2019-06-06|2019-06-07|2019-06-08|2019-06-09|2019-06-10|2019-06-11|2019-06-12|2019-06-13|2019-06-14|2019-06-15|2019-06-16|2019-06-17|2019-06-18|2019-06-19|2019-06-20|2019-06-21|2019-06-22|2019-06-23|2019-06-24|2019-06-25|2019-06-26|2019-06-27|2019-06-28|2019-06-29|2019-06-30|2019-07-01|2019-07-02|2019-07-03|2019-07-04|2019-07-05|2019-07-06|2019-07-07|2019-07-08|2019-07-09|2019-07-10|2019-07-11|2019-07-12|2019-07-13|2019-07-14|2019-07-15|2019-07-16|2019-07-17|2019-07-18|2019-07-19|2019-07-20|2019-07-21|2019-07-22|2019-07-23|2019-07-24|2019-07-25|2019-07-26|2019-07-27|2019-07-28|2019-07-29|2019-07-30|2019-07-31|2019-08-01|2019-08-02|2019-08-03|2019-08-04|2019-08-05|2019-08-06|2019-08-07|2019-08-08|2019-08-09|2019-08-10|2019-08-11|2019-08-12|2019-08-13|2019-08-14|2019-08-15|2019-08-16|2019-08-17|2019-08-18|2019-08-19|2019-08-20|2019-08-21|2019-08-22|2019-08-23|2019-08-24|2019-08-25|2019-08-26|2019-08-27|2019-08-28|2019-08-29|2019-08-30|2019-08-31|2019-09-01|2019-09-02|2019-09-03|2019-09-04|2019-09-05|2019-09-06|2019-09-07|2019-09-08|2019-09-09|2019-09-10|2019-09-11|2019-09-12|2019-09-13|2019-09-14|2019-09-15|2019-09-16|2019-09-17|2019-09-18|2019-09-19|2019-09-20|2019-09-21|2019-09-22|2019-09-23|2019-09-24|2019-09-25|2019-09-26|2019-09-27|2019-09-28|2019-09-29|2019-09-30|2019-10-01|2019-10-02|2019-10-03|2019-10-04|2019-10-05|2019-10-06|2019-10-07|2019-10-08|2019-10-09|2019-10-10|2019-10-11|2019-10-12|2019-10-13|2019-10-14|2019-10-15|2019-10-16|2019-10-17|2019-10-18|2019-10-19|2019-10-20|2019-10-21|2019-10-22|2019-10-23|2019-10-24|2019-10-25|2019-10-26|2019-10-27|2019-10-28|2019-10-29|2019-10-30|2019-10-31|2019-11-01|2019-11-02|2019-11-03|2019-11-04|2019-11-05|2019-11-06|2019-11-07|2019-11-08|2019-11-09|2019-11-10|2019-11-11|2019-11-12|2019-11-13|2019-11-14|2019-11-15|2019-11-16|2019-11-17|2019-11-18|2019-11-19|2019-11-20|2019-11-21|2019-11-22|2019-11-23|2019-11-24|2019-11-25|2019-11-26|2019-11-27|2019-11-28|2019-11-29|2019-11-30|2019-12-01|2019-12-02|2019-12-03|2019-12-04|2019-12-05|2019-12-06|2019-12-07|2019-12-08|2019-12-09|2019-12-10|2019-12-11|2019-12-12|2019-12-13|2019-12-14|2019-12-15|2019-12-16|2019-12-17|2019-12-18|2019-12-19|2019-12-20|2019-12-21|2019-12-22|2019-12-23|2019-12-24|2019-12-25|2019-12-26|2019-12-27|2019-12-28|2019-12-29|2019-12-30|2019-12-31|
| | | | | | | | |2019-01-08| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-02-12| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-03-12| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-04-09| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-05-14| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-06-11| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-07-09| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-08-13| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-09-10| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-10-08| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-11-12| | | | | | | | | | | | | | | | | | | | | | | | | | | |2019-12-10| | | | | | | | | | | | | | | | | | | | | |
See the Unit tests for more examples.