File: finland.py

package info (click to toggle)
python-holidays 0.86-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 57,296 kB
  • sloc: python: 117,830; javascript: 85; makefile: 59
file content (353 lines) | stat: -rw-r--r-- 13,778 bytes parent folder | download
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
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
#  holidays
#  --------
#  A fast, efficient Python library for generating country, province and state
#  specific sets of holidays on the fly. It aims to make determining whether a
#  specific date is a holiday as fast and flexible as possible.
#
#  Authors: Vacanza Team and individual contributors (see CONTRIBUTORS file)
#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
#  Website: https://github.com/vacanza/holidays
#  License: MIT (see LICENSE file)

from gettext import gettext as tr

from holidays.calendars.gregorian import _timedelta
from holidays.constants import PUBLIC, UNOFFICIAL, WORKDAY
from holidays.groups import ChristianHolidays, InternationalHolidays
from holidays.holiday_base import HolidayBase


class Finland(HolidayBase, ChristianHolidays, InternationalHolidays):
    """Finland holidays.

    Official Flag Days are included in the `WORKDAY` category, while Customary Flag Days
    are included in `UNOFFICIAL` category.

    References:
        * <https://en.wikipedia.org/wiki/Public_holidays_in_Finland>
        * [Bank holidays (Finnish)](https://web.archive.org/web/20250416185850/https://www.suomenpankki.fi/fi/raha-ja-maksaminen/pankkivapaapaivat/)
        * [Bank holidays (English)](https://web.archive.org/web/20250327200736/https://www.suomenpankki.fi/en/money-and-payments/bank-holidays/)
        * [Bank holidays (Swedish)](https://web.archive.org/web/20250217014536/https://www.suomenpankki.fi/sv/pengar-och-betalningar/bankfria-dagar-i-finland/)
        * <https://en.wikipedia.org/wiki/Flag_flying_days_in_Finland#Customary_flag_days>
        * <https://web.archive.org/web/20250327201901/https://intermin.fi/en/flag-and-arms/flag-flying-days>
        * <https://web.archive.org/web/20241227163324/https://intermin.fi/en/flag-and-arms/flag-days/2024>
        * <https://web.archive.org/web/20250515053310/https://almanakka.helsinki.fi/en/flag-days-and-holidays/>
        * <https://web.archive.org/web/20250515054129/https://www.finlex.fi/en/legislation/collection/1978/383>
        * <https://web.archive.org/web/20250515064749/https://itsenäisyys.fi/itsenaisyyspaivan-perinteet-vakiintuivat-jo-itsenaisyyden-alkuvuosina/>
        * <https://web.archive.org/web/20250515072453/https://yle.fi/a/20-152398>
        * <https://en.wikipedia.org/wiki/Independence_Day_(Finland)>
        * <https://en.wikipedia.org/wiki/Åland's_Autonomy_Day>
        * <https://web.archive.org/web/20250509184304/https://wiki.aineetonkulttuuriperinto.fi/wiki/Workers’_Labour_Day_on_May_1>
    """

    country = "FI"
    default_language = "fi"
    supported_languages = ("en_US", "fi", "sv_FI", "th", "uk")
    supported_categories = (PUBLIC, UNOFFICIAL, WORKDAY)
    subdivisions: tuple[str, ...] = (
        "01",  # Ahvenanmaan maakunta (Landskapet Åland).
        "02",  # Etelä-Karjala (Södra Karelen).
        "03",  # Etelä-Pohjanmaa (Södra Österbotten).
        "04",  # Etelä-Savo (Södra Savolax).
        "05",  # Kainuu (Kajanaland).
        "06",  # Kanta-Häme (Egentliga Tavastland).
        "07",  # Keski-Pohjanmaa (Mellersta Österbotten).
        "08",  # Keski-Suomi (Mellersta Finland).
        "09",  # Kymenlaakso (Kymmenedalen).
        "10",  # Lappi (Lappland).
        "11",  # Pirkanmaa (Birkaland).
        "12",  # Pohjanmaa (Österbotten).
        "13",  # Pohjois-Karjala (Norra Karelen).
        "14",  # Pohjois-Pohjanmaa (Norra Österbotten).
        "15",  # Pohjois-Savo (Norra Savolax).
        "16",  # Päijät-Häme (Päijänne-Tavastland).
        "17",  # Satakunta.
        "18",  # Uusimaa (Nyland).
        "19",  # Varsinais-Suomi (Egentliga Finland).
    )
    subdivisions_aliases = {
        "Ahvenanmaan maakunta": "01",
        "Landskapet Åland": "01",
        "Etelä-Karjala": "02",
        "Södra Karelen": "02",
        "Etelä-Pohjanmaa": "03",
        "Södra Österbotten": "03",
        "Etelä-Savo": "04",
        "Södra Savolax": "04",
        "Kainuu": "05",
        "Kajanaland": "05",
        "Kanta-Häme": "06",
        "Egentliga Tavastland": "06",
        "Keski-Pohjanmaa": "07",
        "Mellersta Österbotten": "07",
        "Keski-Suomi": "08",
        "Mellersta Finland": "08",
        "Kymenlaakso": "09",
        "Kymmenedalen": "09",
        "Lappi": "10",
        "Lappland": "10",
        "Pirkanmaa": "11",
        "Birkaland": "11",
        "Pohjanmaa": "12",
        "Österbotten": "12",
        "Pohjois-Karjala": "13",
        "Norra Karelen": "13",
        "Pohjois-Pohjanmaa": "14",
        "Norra Österbotten": "14",
        "Pohjois-Savo": "15",
        "Norra Savolax": "15",
        "Päijät-Häme": "16",
        "Päijänne-Tavastland": "16",
        "Satakunta": "17",
        "Uusimaa": "18",
        "Nyland": "18",
        "Varsinais-Suomi": "19",
        "Egentliga Finland": "19",
    }
    start_year = 1853

    def __init__(self, *args, **kwargs):
        ChristianHolidays.__init__(self)
        InternationalHolidays.__init__(self)
        super().__init__(*args, **kwargs)

    def _populate_public_holidays(self):
        # New Year's Day.
        self._add_new_years_day(tr("Uudenvuodenpäivä"))

        # Epiphany.
        name = tr("Loppiainen")
        if 1973 <= self._year <= 1990:
            self._add_holiday_1st_sat_from_jan_6(name)
        else:
            self._add_epiphany_day(name)

        # Good Friday.
        self._add_good_friday(tr("Pitkäperjantai"))

        # Easter Sunday.
        self._add_easter_sunday(tr("Pääsiäispäivä"))

        # Easter Monday.
        self._add_easter_monday(tr("Toinen pääsiäispäivä"))

        if self._year >= 1944:
            # May Day.
            self._add_holiday_may_1(tr("Vappu"))

        # Ascension Day.
        name = tr("Helatorstai")
        if 1973 <= self._year <= 1990:
            self._add_holiday_34_days_past_easter(name)
        else:
            self._add_ascension_thursday(name)

        # Whit Sunday.
        self._add_whit_sunday(tr("Helluntaipäivä"))

        # Midsummer Eve.
        name = tr("Juhannusaatto")
        if self._year >= 1955:
            dt = self._add_holiday_1st_fri_from_jun_19(name)
        else:
            dt = self._add_holiday_jun_23(name)

        # Midsummer Day.
        self._add_holiday(tr("Juhannuspäivä"), _timedelta(dt, +1))

        # All Saints' Day.
        name = tr("Pyhäinpäivä")
        if self._year >= 1955:
            self._add_holiday_1st_sat_from_oct_31(name)
        else:
            self._add_holiday_nov_1(name)

        # Designated as Public Holiday on NOV 20th, 1919.
        if self._year >= 1919:
            # Independence Day.
            self._add_holiday_dec_6(tr("Itsenäisyyspäivä"))

        # Christmas Eve.
        self._add_christmas_eve(tr("Jouluaatto"))

        # Christmas Day.
        self._add_christmas_day(tr("Joulupäivä"))

        # Second Day of Christmas.
        self._add_christmas_day_two(tr("Tapaninpäivä"))

    def _populate_unofficial_holidays(self):
        # Customary Flag Days.

        # Unofficial observance starts in 1854.
        # Starting in 1929, become a name day of J.L. Runeberg.
        # Added to the Almanac in 1950 as J.L. Runeberg's Day.
        # Become a Flag Day in 1976.
        if self._year >= 1976:
            # Runeberg Day.
            self._add_holiday_feb_5(tr("Runebergin päivä"))

        # Petition for Flag Day status starts in 2003.
        # Become a Flag Day in 2007.
        if self._year >= 2007:
            #  Minna Canth Day, Day of Equality.
            self._add_holiday_mar_19(tr("Minna Canthin päivä, tasa-arvon päivä"))

        # Added to the Almanac in 1960 as Mikael Agricola Day.
        # Also considered the "Day of Finnish Language" from 1980 onwards.
        # Become a Flag Day in 1980.
        if self._year >= 1980:
            # Mikael Agricola Day, Day of the Finnish Language.
            self._add_holiday_apr_9(tr("Mikael Agricolan päivä, suomen kielen päivä"))

        # Become a Flag Day in 1987.
        if self._year >= 1987:
            # National War Veterans' Day.
            self._add_holiday_apr_27(tr("Kansallinen veteraanipäivä"))

        # Become a Flag Day in 2019.
        if self._year >= 2019:
            # Europe Day.
            self._add_europe_day(tr("Eurooppa-päivä"))

        # Petition for Flag Day status starts in the 1920s.
        # Become a Flag Day in 1952.
        # Also considered the "Day of Finnish Heritage" from 1978 onward.
        if self._year >= 1952:
            self._add_holiday_may_12(
                # J. V. Snellman Day, Day of Finnish Heritage.
                tr("J.V. Snellmanin päivä, suomalaisuuden päivä")
                if self._year >= 1978
                # J. V. Snellman Day.
                else tr("J.V. Snellmanin päivä")
            )

        # Become a Flag Day in 1977.
        if self._year >= 1977:
            # Remembrance Day.
            self._add_holiday_3rd_sun_of_may(tr("Kaatuneitten muistopäivä"))

        # Become a Flag Day in 1998.
        if self._year >= 1998:
            # Eino Leino Day, Day of Summer and Poetry.
            self._add_holiday_jul_6(tr("Eino Leinon päivä, runon ja suven päivä"))

        # Added to the Almanac in 2020.
        # Become a Flag Day in 2023.
        if self._year >= 2023:
            # Finland's Nature Day.
            self._add_holiday_last_sat_of_aug(tr("Suomen luonnon päivä"))

        # Become a Flag Day in 2016.
        if self._year >= 2016:
            # Miina Sillanpää Day, Day of Civic Participation.
            self._add_holiday_oct_1(tr("Miina Sillanpään ja kansalaisvaikuttamisen päivä"))

        # Become a Flag Day in 1950.
        # Also considered the "Day of Finnish Literature" from 1978 onward.
        if self._year >= 1950:
            self._add_holiday_oct_10(
                # Aleksis Kivi Day, Day of Finnish Literature.
                tr("Aleksis Kiven päivä, suomalaisen kirjallisuuden päivä")
                if self._year >= 1978
                # Aleksis Kivi Day.
                else tr("Aleksis Kiven päivä")
            )

        # Become a Flag Day in 1987.
        if self._year >= 1987:
            # United Nations Day.
            self._add_united_nations_day(tr("YK:n päivä"))

        # Become a Flag Day in 1979.
        if self._year >= 1979:
            # Finnish Swedish Heritage Day, svenska dagen.
            self._add_holiday_nov_6(tr("Ruotsalaisuuden päivä, Kustaa Aadolfin päivä"))

        # Become a Customary Flag Day in 1987.
        # Become an Official Flag Day in 2019.
        if 1987 <= self._year <= 2018:
            # Father's Day.
            self._add_holiday_2nd_sun_of_nov(tr("Isänpäivä"))

        # Become a Flag Day in 2020.
        if self._year >= 2020:
            # Day of Children's Rights.
            self._add_holiday_nov_20(tr("Lapsen oikeuksien päivä"))

        # First recommendation starts in 2005.
        # Become a Flag Day in 2011.
        if self._year >= 2011:
            # Jean Sibelius Day, Day of Finnish Music.
            self._add_holiday_dec_8(tr("Jean Sibeliuksen päivä, suomalaisen musiikin päivä"))

    def _populate_workday_holidays(self):
        # Official Flag Days.

        # First general observance starts in 1885.
        # Become a Flag Day in 1920.
        # Added to the Almanac in 1950, confirmed by a decree in 1978.
        if self._year >= 1920:
            # Kalevala Day, Day of Finnish Culture.
            self._add_holiday_feb_28(tr("Kalevalan päivä, suomalaisen kulttuurin päivä"))

        # While May Day is already a Public Holiday since 1944, it gains Flag Day status in 1978,
        # although actual observance starts in 1979.
        if self._year >= 1979:
            # May Day.
            self._add_holiday_may_1(tr("Vappu"))

        # First observed in parts of Finland in 1918.
        # Moved from 3rd to 2nd Sunday of May in 1927.
        # Become Flag Day in 1947.
        if self._year >= 1947:
            # Mother's Day.
            self._add_holiday_2nd_sun_of_may(tr("Äitienpäivä"))

        # Become a Flag Day in 1942.
        # Got its current name in 1950.
        if self._year >= 1942:
            self._add_holiday_jun_6(
                # Flag Day of the Finnish Defense Forces.
                tr("Puolustusvoimain lippujuhlan päivä")
                if self._year >= 1950
                # Birthday of the Marshal of Finland.
                else tr("Suomen marsalkan syntymäpäivä")
            )

        # Day of the Finnish Flag was first created in 1934.
        # This coincides with Midsummer Day.

        # Day of the Finnish Flag.
        name = tr("Suomen lipun päivä")
        if self._year >= 1955:
            self._add_holiday_1st_sat_from_jun_20(name)
        elif self._year >= 1934:
            self._add_holiday_jun_24(name)

        # Become a Customary Flag Day in 1987.
        # Become an Official Flag Day in 2019.
        if self._year >= 2019:
            # Father's Day.
            self._add_holiday_2nd_sun_of_nov(tr("Isänpäivä"))

        # Flag Day status assumed to start in 1919.
        if self._year >= 1919:
            # Independence Day.
            self._add_holiday_dec_6(tr("Itsenäisyyspäivä"))

    def _populate_subdiv_01_public_holidays(self):
        # Celebrated since 1993 when the 70th anniversary of the Autonomy Act of 1920 was
        # first formally recognized as a flag day.
        if self._year >= 1993:
            # Åland's Autonomy Day.
            self._add_holiday_jun_9(tr("Ahvenanmaan itsehallintopäivä"))


class FI(Finland):
    pass


class FIN(Finland):
    pass