1 ! Copyright (C) 2009 Doug Coleman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors calendar calendar.holidays
4 calendar.holidays.private calendar.private combinators
5 combinators.short-circuit kernel math sequences ;
6 IN: calendar.holidays.us
8 SINGLETONS: us us-federal us-market ;
10 HOLIDAY: new-years-day january 1 >>day ;
11 HOLIDAY-NAME: new-years-day world "New Year's Day"
12 HOLIDAY-NAME: new-years-day us-federal "New Year's Day"
13 HOLIDAY-NAME: new-years-day us-market "New Year's Day"
17 : adjust-federal-holiday ( timestamp -- timestamp )
19 ! Don't adjust to Dec 31
20 { [ dup { [ dup new-years-day same-day? ] [ saturday? ] } 1&& ] [ ] }
21 { [ dup saturday? ] [ -1 days (time+) ] }
22 { [ dup sunday? ] [ 1 days (time+) ] }
28 : adjust-federal-holidays ( timestamp seq -- seq' )
30 [ clone ] dip execute( timestamp -- timestamp ) adjust-federal-holiday
33 M: us-federal holidays
34 (holidays) adjust-federal-holidays ;
37 (holidays) adjust-federal-holidays ;
39 : us-post-office-open? ( timestamp -- ? )
40 { [ sunday? not ] [ us-federal holiday? not ] } 1&& ;
42 HOLIDAY: martin-luther-king-day january 2 monday-of-month ;
43 HOLIDAY-NAME: martin-luther-king-day us-federal "Martin Luther King Day"
44 HOLIDAY-NAME: martin-luther-king-day us-market "Martin Luther King Day"
46 HOLIDAY: inauguration-day january 20 >>day [ dup 4 neg rem + ] change-year ;
47 HOLIDAY-NAME: inauguration-day us "Inauguration Day"
49 HOLIDAY: washingtons-birthday february 2 monday-of-month ;
50 HOLIDAY-NAME: washingtons-birthday us-market "Washington's Birthday"
52 HOLIDAY: good-friday easter 2 days time- ;
53 HOLIDAY-NAME: good-friday us-market "Good Friday"
55 HOLIDAY: presidents-day february 2 monday-of-month ;
56 HOLIDAY-NAME: presidents-day us-federal "President's Day"
58 HOLIDAY: memorial-day may last-monday-of-month ;
59 HOLIDAY-NAME: memorial-day us-federal "Memorial Day"
60 HOLIDAY-NAME: memorial-day us-market "Memorial Day"
62 HOLIDAY: juneteenth-national-independence-day june 19 >>day ;
63 HOLIDAY-NAME: juneteenth-national-independence-day us-federal "Juneteenth National Independence Day"
64 HOLIDAY-NAME: juneteenth-national-independence-day us-market "Juneteenth National Independence Day"
66 HOLIDAY: independence-day july 4 >>day ;
67 HOLIDAY-NAME: independence-day us-federal "Independence Day"
68 HOLIDAY-NAME: independence-day us-market "Independence Day"
70 HOLIDAY: labor-day september 0 monday-of-month ;
71 HOLIDAY-NAME: labor-day us-federal "Labor Day"
72 HOLIDAY-NAME: labor-day us-market "Labor Day"
74 HOLIDAY: columbus-day october 1 monday-of-month ;
75 HOLIDAY-NAME: columbus-day us-federal "Columbus Day"
77 HOLIDAY-NAME: armistice-day us-federal "Veterans Day"
79 HOLIDAY: thanksgiving-day november 3 thursday-of-month ;
80 HOLIDAY-NAME: thanksgiving-day us-federal "Thanksgiving Day"
81 HOLIDAY-NAME: thanksgiving-day us-market "Thanksgiving Day"
83 HOLIDAY: christmas-day december 25 >>day ;
84 HOLIDAY-NAME: christmas-day world "Christmas Day"
85 HOLIDAY-NAME: christmas-day us-federal "Christmas Day"
86 HOLIDAY-NAME: christmas-day us-market "Christmas Day"
88 HOLIDAY: belly-laugh-day january 24 >>day ;
90 HOLIDAY: groundhog-day february 2 >>day ;
92 HOLIDAY: lincolns-birthday february 12 >>day ;
94 HOLIDAY: valentines-day february 14 >>day ;
96 HOLIDAY: st-patricks-day march 17 >>day ;
98 HOLIDAY: ash-wednesday easter 46 days time- ;
100 ALIAS: first-day-of-lent ash-wednesday
102 HOLIDAY: fat-tuesday ash-wednesday 1 days time- ;
104 HOLIDAY: tax-day april 15 >>day ;
106 HOLIDAY: earth-day april 22 >>day ;
108 HOLIDAY: administrative-professionals-day april last-saturday-of-month wednesday ;
110 HOLIDAY: cinco-de-mayo may 5 >>day ;
112 HOLIDAY: mothers-day may 1 sunday-of-month ;
114 HOLIDAY: armed-forces-day may 2 saturday-of-month ;
116 HOLIDAY: national-donut-day june 0 friday-of-month ;
118 HOLIDAY: flag-day june 14 >>day ;
120 HOLIDAY: parents-day july 3 sunday-of-month ;
122 HOLIDAY: grandparents-day labor-day 1 weeks time+ ;
124 HOLIDAY: patriot-day september 11 >>day ;
126 HOLIDAY: stepfamily-day september 16 >>day ;
128 HOLIDAY: citizenship-day september 17 >>day ;
130 HOLIDAY: bosss-day october 16 >>day ;
132 HOLIDAY: sweetest-day october 2 saturday-of-month ;
134 HOLIDAY: halloween october 31 >>day ;
136 HOLIDAY: election-day november 0 monday-of-month 1 days time+ ;
138 HOLIDAY: black-friday thanksgiving-day 1 days time+ ;
140 HOLIDAY: pearl-harbor-remembrance-day december 7 >>day ;
142 HOLIDAY: new-years-eve december 31 >>day ;