cal_calc/
calendar_definitions.rs

1use super::{Holiday, NthWeek, Weekday};
2use time::macros::date;
3
4pub fn us_settlement_holidays() -> Vec<Holiday> {
5    vec![
6        // Saturdays
7        Holiday::WeekDay(Weekday::Saturday),
8        // Sundays
9        Holiday::WeekDay(Weekday::Sunday),
10        // New Year's day
11        Holiday::ModifiedMovableYearlyDay {
12            month: 1,
13            day: 1,
14            first: None,
15            last: None,
16        },
17        // Martin Luther King's birthday (third Monday in January)
18        Holiday::MonthWeekday {
19            month: 1,
20            weekday: Weekday::Monday,
21            nth: NthWeek::Third,
22            first: Some(1983),
23            last: None,
24        },
25        // Washington's birthday (third Monday in February)
26        Holiday::MonthWeekday {
27            month: 2,
28            weekday: Weekday::Monday,
29            nth: NthWeek::Third,
30            first: Some(1971),
31            last: None,
32        },
33        Holiday::ModifiedMovableYearlyDay {
34            month: 2,
35            day: 22,
36            first: None,
37            last: Some(1970),
38        },
39        // Memorial Day (last Monday in May)
40        Holiday::MonthWeekday {
41            month: 5,
42            weekday: Weekday::Monday,
43            nth: NthWeek::Last,
44            first: Some(1971),
45            last: None,
46        },
47        Holiday::ModifiedMovableYearlyDay {
48            month: 5,
49            day: 30,
50            first: None,
51            last: Some(1970),
52        },
53        // Juneteenth (Monday if Sunday or Friday if Saturday)
54        Holiday::ModifiedMovableYearlyDay {
55            month: 6,
56            day: 19,
57            first: Some(2022),
58            last: None,
59        },
60        // Independence Day (Monday if Sunday or Friday if Saturday)
61        Holiday::ModifiedMovableYearlyDay {
62            month: 7,
63            day: 4,
64            first: None,
65            last: None,
66        },
67        // Labor Day (first Monday in September)
68        Holiday::MonthWeekday {
69            month: 9,
70            weekday: Weekday::Monday,
71            nth: NthWeek::First,
72            first: None,
73            last: None,
74        },
75        // Columbus Day (second Monday in October)
76        Holiday::MonthWeekday {
77            month: 10,
78            weekday: Weekday::Monday,
79            nth: NthWeek::Second,
80            first: Some(1971),
81            last: None,
82        },
83        // Veteran's Day
84        Holiday::MonthWeekday {
85            month: 10,
86            weekday: Weekday::Monday,
87            nth: NthWeek::Fourth,
88            first: None,
89            last: Some(1970),
90        },
91        Holiday::ModifiedMovableYearlyDay {
92            month: 11,
93            day: 11,
94            first: Some(1971),
95            last: Some(1977),
96        },
97        Holiday::MonthWeekday {
98            month: 10,
99            weekday: Weekday::Monday,
100            nth: NthWeek::Fourth,
101            first: Some(1978),
102            last: None,
103        },
104        // Thanksgiving Day (fourth Thursday in November)
105        Holiday::MonthWeekday {
106            month: 11,
107            weekday: Weekday::Thursday,
108            nth: NthWeek::Fourth,
109            first: None,
110            last: None,
111        },
112        // Christmas (Monday if Sunday or Friday if Saturday)
113        Holiday::ModifiedMovableYearlyDay {
114            month: 12,
115            day: 25,
116            first: None,
117            last: None,
118        },
119    ]
120}
121
122pub fn uk_settlement_holidays() -> Vec<Holiday> {
123    vec![
124        // Saturdays
125        Holiday::WeekDay(Weekday::Saturday),
126        // Sundays
127        Holiday::WeekDay(Weekday::Sunday),
128        // New Year's day
129        Holiday::MovableYearlyDay {
130            month: 1,
131            day: 1,
132            first: None,
133            last: None,
134        },
135        // Good Friday
136        Holiday::EasterOffset {
137            offset: -2,
138            first: None,
139            last: None,
140        },
141        // Easter Monday
142        Holiday::EasterOffset {
143            offset: 1,
144            first: None,
145            last: None,
146        },
147        // first Monday of May, moved two times in history to 8th of May
148        Holiday::MonthWeekday {
149            month: 5,
150            weekday: Weekday::Monday,
151            nth: NthWeek::First,
152            first: None,
153            last: Some(1994),
154        },
155        Holiday::SingularDay(date!(1995 - 5 - 8)),
156        Holiday::MonthWeekday {
157            month: 5,
158            weekday: Weekday::Monday,
159            nth: NthWeek::First,
160            first: Some(1996),
161            last: Some(2019),
162        },
163        Holiday::SingularDay(date!(2020 - 5 - 8)),
164        Holiday::MonthWeekday {
165            month: 5,
166            weekday: Weekday::Monday,
167            nth: NthWeek::First,
168            first: Some(2021),
169            last: None,
170        },
171        // last Monday of May (Spring Bank Holiday), has been skipped two times
172        Holiday::MonthWeekday {
173            month: 5,
174            weekday: Weekday::Monday,
175            nth: NthWeek::Last,
176            first: None,
177            last: Some(2001),
178        },
179        Holiday::MonthWeekday {
180            month: 5,
181            weekday: Weekday::Monday,
182            nth: NthWeek::Last,
183            first: Some(2003),
184            last: Some(2011),
185        },
186        Holiday::MonthWeekday {
187            month: 5,
188            weekday: Weekday::Monday,
189            nth: NthWeek::Last,
190            first: Some(2013),
191            last: None,
192        },
193        // last Monday of August (Summer Bank Holiday)
194        Holiday::MonthWeekday {
195            month: 8,
196            weekday: Weekday::Monday,
197            nth: NthWeek::Last,
198            first: None,
199            last: None,
200        },
201        // Christmas
202        Holiday::MovableYearlyDay {
203            month: 12,
204            day: 25,
205            first: None,
206            last: None,
207        },
208        // Boxing Day
209        Holiday::MovableYearlyDay {
210            month: 12,
211            day: 26,
212            first: None,
213            last: None,
214        },
215        // Golden Jubilee
216        Holiday::SingularDay(date!(2002 - 6 - 3)),
217        // Special Spring Holiday
218        Holiday::SingularDay(date!(2002 - 6 - 4)),
219        // Royal Wedding
220        Holiday::SingularDay(date!(2011 - 4 - 29)),
221        // Diamond Jubilee
222        Holiday::SingularDay(date!(2012 - 6 - 4)),
223        // Special Spring Holiday
224        Holiday::SingularDay(date!(2012 - 6 - 5)),
225        // Introduction of EUR
226        Holiday::SingularDay(date!(1999 - 12 - 31)),
227    ]
228}
229
230pub fn target_holidays() -> Vec<Holiday> {
231    vec![
232        // Saturdays
233        Holiday::WeekDay(Weekday::Saturday),
234        // Sundays
235        Holiday::WeekDay(Weekday::Sunday),
236        // New Year's day
237        Holiday::YearlyDay {
238            month: 1,
239            day: 1,
240            first: None,
241            last: None,
242        },
243        // Good Friday
244        Holiday::EasterOffset {
245            offset: -2,
246            first: Some(2000),
247            last: None,
248        },
249        // Easter Monday
250        Holiday::EasterOffset {
251            offset: 1,
252            first: Some(2000),
253            last: None,
254        },
255        // Labour Day
256        Holiday::YearlyDay {
257            month: 5,
258            day: 1,
259            first: Some(2000),
260            last: None,
261        },
262        // Christmas
263        Holiday::YearlyDay {
264            month: 12,
265            day: 25,
266            first: None,
267            last: None,
268        },
269        // Day of Goodwill
270        Holiday::YearlyDay {
271            month: 12,
272            day: 26,
273            first: Some(2000),
274            last: None,
275        },
276        // December 31st, 1998, 1999, and 2001 only
277        Holiday::SingularDay(date!(1998 - 12 - 31)),
278        Holiday::SingularDay(date!(1999 - 12 - 31)),
279        Holiday::SingularDay(date!(2001 - 12 - 31)),
280        Holiday::SingularDay(date!(1995 - 5 - 8)),
281    ]
282}
283
284pub fn nok_holidays() -> Vec<Holiday> {
285    vec![
286        // Saturdays
287        Holiday::WeekDay(Weekday::Saturday),
288        // Sundays
289        Holiday::WeekDay(Weekday::Sunday),
290        // Holy Thursday
291        Holiday::EasterOffset {
292            offset: -4,
293            first: None,
294            last: None,
295        },
296        // Good Friday
297        Holiday::EasterOffset {
298            offset: -3,
299            first: None,
300            last: None,
301        },
302        // Easter Monday
303        Holiday::EasterOffset {
304            offset: 0,
305            first: None,
306            last: None,
307        },
308        // Ascension Thursday
309        Holiday::EasterOffset {
310            offset: 38,
311            first: None,
312            last: None,
313        },
314        // Whit Monday
315        Holiday::EasterOffset {
316            offset: 49,
317            first: None,
318            last: None,
319        },
320        // New Year's Day
321        Holiday::YearlyDay {
322            month: 1,
323            day: 1,
324            first: None,
325            last: None,
326        },
327        // May Day
328        Holiday::YearlyDay {
329            month: 5,
330            day: 1,
331            first: None,
332            last: None,
333        },
334        // National Independence Day
335        Holiday::YearlyDay {
336            month: 5,
337            day: 17,
338            first: None,
339            last: None,
340        },
341        // Christmas Eve
342        Holiday::YearlyDay {
343            month: 12,
344            day: 24,
345            first: Some(2002),
346            last: None,
347        },
348        // Christmas
349        Holiday::YearlyDay {
350            month: 12,
351            day: 25,
352            first: None,
353            last: None,
354        },
355        // Boxing Day
356        Holiday::YearlyDay {
357            month: 12,
358            day: 26,
359            first: None,
360            last: None,
361        },
362    ]
363}