Repository: vacanza/holidays
Pull request #2124 (2024-11-13 12:20:08)

Update China holidays in 2025
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Update China holidays in 2025:
- additional holiday days due to law changes from 2025
- 2025 substituted holidays

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [ ] New country/market holidays support (thank you!)
- [x] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.rst
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source



Patch:
diff --git a/holidays/countries/china.py b/holidays/countries/china.py
index f07eb942..7ee9af62 100644
--- a/holidays/countries/china.py
+++ b/holidays/countries/china.py
@@ -23,6 +23,8 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
     References:
         - https://en.wikipedia.org/wiki/Public_holidays_in_China
         - `Festivals and Public Holidays <https://zh.wikipedia.org/wiki/中华人民共和国节日与公众假期>`_
+        - 2024 changes (Order #795) `<https://www.gov.cn/zhengce/content/202411/content_6986380.htm>`_
+        - `2025 <https://www.gov.cn/zhengce/content/202411/content_6986382.htm>`_
         - `2024 <https://www.gov.cn/zhengce/content/202310/content_6911527.htm>`_
         - `2023 <https://www.gov.cn/gongbao/content/2023/content_5736714.htm>`_
         - `2022 <https://www.gov.cn/gongbao/content/2021/content_5651728.htm>`_
@@ -95,29 +97,34 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
         # Status: In-Use (Statutory).
         # Day 1-3 of Chinese New Year in 1949, 1999, 2007, and 2013 revision.
         # 2007 revision introduced New Year's Eve (农历除夕) instead of
-        # New Year's 3rd day; 2013 revision returned it back.
+        # New Year's 3rd day; 2013 revision returned it back;
+        # 2024 revision returned also New Year's Eve.
 
         # Spring Festival Golden Weekend
-        # Checked with Official Notice from 2001-2023.
+        # Checked with Official Notice from 2001-2025.
         # Consecutive Holidays are available from 2000 (1999 rev.).
 
         # Chinese New Year (Spring Festival).
         chinese_new_year = tr("春节")
+        # Chinese New Year's Eve.
+        chinese_new_years_eve = tr("农历除夕")
         dts_observed.add(self._add_chinese_new_years_day(chinese_new_year))
         dts_observed.add(self._add_chinese_new_years_day_two(chinese_new_year))
         if 2008 <= self._year <= 2013:
-            # Chinese New Year's Eve.
-            dts_observed.add(self._add_chinese_new_years_eve(tr("农历除夕")))
+            dts_observed.add(self._add_chinese_new_years_eve(chinese_new_years_eve))
         else:
             dts_observed.add(self._add_chinese_new_years_day_three(chinese_new_year))
+        if self._year >= 2025:
+            dts_observed.add(self._add_chinese_new_years_eve(chinese_new_years_eve))
 
         # 劳动节
         # Status: In-Use (Statutory).
         # May 1 in 1949, 1999, 2007, and 2013 revision.
         # Additional Holidays (May 2-3) are available from 2000 (1999 rev.) - 2007 (2007 rev.).
+        # May 2 returned in 2024 revision.
 
         # Labor Day Golden Weekend
-        # Checked with Official Notice from 2001-2023.
+        # Checked with Official Notice from 2001-2025.
         # Consecutive Holidays are available from 2002, with exception of ????-????.
 
         # Labor Day.
@@ -126,6 +133,8 @@ class China(ObservedHolidayBase, ChineseCalendarHolidays, InternationalHolidays,
         if 2000 <= self._year <= 2007:
             dts_observed.add(self._add_labor_day_two(labor_day))
             dts_observed.add(self._add_labor_day_three(labor_day))
+        elif self._year >= 2025:
+            dts_observed.add(self._add_labor_day_two(labor_day))
 
         # 国庆节
         # Status: In-Use (Statutory).
@@ -436,6 +445,13 @@ class ChinaStaticHolidays:
             (OCT, 4, SEP, 29),  # National Day
             (OCT, 7, OCT, 12),  # National Day
         ),
+        2025: (
+            (FEB, 3, JAN, 26),  # Spring Festival
+            (FEB, 4, FEB, 8),  # Spring Festival
+            (MAY, 5, APR, 27),  # Labor Day
+            (OCT, 7, SEP, 28),  # National Day
+            (OCT, 8, OCT, 11),  # National Day
+        ),
     }
 
     special_public_holidays_observed = {
diff --git a/requirements/build.txt b/requirements/build.txt
index 5cc8c1c8..4d2398e3 100644
--- a/requirements/build.txt
+++ b/requirements/build.txt
@@ -1,3 +1,3 @@
 build==1.2.2.post1
-cyclonedx-bom==5.1.0
+cyclonedx-bom==5.1.1
 polib==1.2.0
diff --git a/requirements/dev.txt b/requirements/dev.txt
index 44e0d12a..28502c5e 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -7,7 +7,7 @@ hijridate==2.5.0
 lingva==5.0.4
 pre-commit==4.0.1
 pygithub==2.5.0
-ruff==0.7.2
+ruff==0.7.3
 tox==4.23.2
 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability
 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/snapshots/countries/CN_COMMON.json b/snapshots/countries/CN_COMMON.json
index 17b54999..cf813729 100644
--- a/snapshots/countries/CN_COMMON.json
+++ b/snapshots/countries/CN_COMMON.json
@@ -1150,13 +1150,18 @@
     "2024-10-04": "Day off (substituted from 09/29/2024)",
     "2024-10-07": "Day off (substituted from 10/12/2024)",
     "2025-01-01": "New Year's Day",
+    "2025-01-28": "Chinese New Year's Eve",
     "2025-01-29": "Chinese New Year (Spring Festival)",
     "2025-01-30": "Chinese New Year (Spring Festival)",
     "2025-01-31": "Chinese New Year (Spring Festival)",
+    "2025-02-03": "Day off (substituted from 01/26/2025)",
+    "2025-02-04": "Day off (substituted from 02/08/2025)",
     "2025-03-08": "International Women's Day",
     "2025-04-04": "Tomb-Sweeping Day",
     "2025-05-01": "Labor Day",
+    "2025-05-02": "Labor Day",
     "2025-05-04": "Youth Day",
+    "2025-05-05": "Day off (substituted from 04/27/2025)",
     "2025-05-31": "Dragon Boat Festival",
     "2025-06-01": "Children's Day",
     "2025-06-02": "Dragon Boat Festival (observed)",
@@ -1165,7 +1170,10 @@
     "2025-10-02": "National Day",
     "2025-10-03": "National Day",
     "2025-10-06": "Mid-Autumn Festival",
+    "2025-10-07": "Day off (substituted from 09/28/2025)",
+    "2025-10-08": "Day off (substituted from 10/11/2025)",
     "2026-01-01": "New Year's Day",
+    "2026-02-16": "Chinese New Year's Eve",
     "2026-02-17": "Chinese New Year (Spring Festival)",
     "2026-02-18": "Chinese New Year (Spring Festival)",
     "2026-02-19": "Chinese New Year (Spring Festival)",
@@ -1173,7 +1181,8 @@
     "2026-04-05": "Tomb-Sweeping Day",
     "2026-04-06": "Tomb-Sweeping Day (observed)",
     "2026-05-01": "Labor Day",
-    "2026-05-04": "Youth Day",
+    "2026-05-02": "Labor Day",
+    "2026-05-04": "Labor Day (observed); Youth Day",
     "2026-06-01": "Children's Day",
     "2026-06-19": "Dragon Boat Festival",
     "2026-08-01": "Army Day",
@@ -1183,6 +1192,7 @@
     "2026-10-03": "National Day",
     "2026-10-05": "National Day (observed)",
     "2027-01-01": "New Year's Day",
+    "2027-02-05": "Chinese New Year's Eve",
     "2027-02-06": "Chinese New Year (Spring Festival)",
     "2027-02-07": "Chinese New Year (Spring Festival)",
     "2027-02-08": "Chinese New Year (Spring Festival)",
@@ -1191,8 +1201,9 @@
     "2027-03-08": "International Women's Day",
     "2027-04-05": "Tomb-Sweeping Day",
     "2027-05-01": "Labor Day",
+    "2027-05-02": "Labor Day",
     "2027-05-03": "Labor Day (observed)",
-    "2027-05-04": "Youth Day",
+    "2027-05-04": "Labor Day (observed); Youth Day",
     "2027-06-01": "Children's Day",
     "2027-06-09": "Dragon Boat Festival",
     "2027-08-01": "Army Day",
@@ -1204,12 +1215,14 @@
     "2027-10-05": "National Day (observed)",
     "2028-01-01": "New Year's Day",
     "2028-01-03": "New Year's Day (observed)",
+    "2028-01-25": "Chinese New Year's Eve",
     "2028-01-26": "Chinese New Year (Spring Festival)",
     "2028-01-27": "Chinese New Year (Spring Festival)",
     "2028-01-28": "Chinese New Year (Spring Festival)",
     "2028-03-08": "International Women's Day",
     "2028-04-04": "Tomb-Sweeping Day",
     "2028-05-01": "Labor Day",
+    "2028-05-02": "Labor Day",
     "2028-05-04": "Youth Day",
     "2028-05-28": "Dragon Boat Festival",
     "2028-05-29": "Dragon Boat Festival (observed)",
@@ -1220,12 +1233,14 @@
     "2028-10-03": "Mid-Autumn Festival; National Day",
     "2028-10-04": "National Day (observed)",
     "2029-01-01": "New Year's Day",
+    "2029-02-12": "Chinese New Year's Eve",
     "2029-02-13": "Chinese New Year (Spring Festival)",
     "2029-02-14": "Chinese New Year (Spring Festival)",
     "2029-02-15": "Chinese New Year (Spring Festival)",
     "2029-03-08": "International Women's Day",
     "2029-04-04": "Tomb-Sweeping Day",
     "2029-05-01": "Labor Day",
+    "2029-05-02": "Labor Day",
     "2029-05-04": "Youth Day",
     "2029-06-01": "Children's Day",
     "2029-06-16": "Dragon Boat Festival",
@@ -1237,13 +1252,16 @@
     "2029-10-02": "National Day",
     "2029-10-03": "National Day",
     "2030-01-01": "New Year's Day",
+    "2030-02-02": "Chinese New Year's Eve",
     "2030-02-03": "Chinese New Year (Spring Festival)",
     "2030-02-04": "Chinese New Year (Spring Festival)",
     "2030-02-05": "Chinese New Year (Spring Festival)",
-    "2030-02-06": "Chinese New Year (Spring Festival) (observed)",
+    "2030-02-06": "Chinese New Year's Eve (observed)",
+    "2030-02-07": "Chinese New Year (Spring Festival) (observed)",
     "2030-03-08": "International Women's Day",
     "2030-04-05": "Tomb-Sweeping Day",
     "2030-05-01": "Labor Day",
+    "2030-05-02": "Labor Day",
     "2030-05-04": "Youth Day",
     "2030-06-01": "Children's Day",
     "2030-06-05": "Dragon Boat Festival",
@@ -1253,6 +1271,7 @@
     "2030-10-02": "National Day",
     "2030-10-03": "National Day",
     "2031-01-01": "New Year's Day",
+    "2031-01-22": "Chinese New Year's Eve",
     "2031-01-23": "Chinese New Year (Spring Festival)",
     "2031-01-24": "Chinese New Year (Spring Festival)",
     "2031-01-25": "Chinese New Year (Spring Festival)",
@@ -1261,6 +1280,7 @@
     "2031-04-05": "Tomb-Sweeping Day",
     "2031-04-07": "Tomb-Sweeping Day (observed)",
     "2031-05-01": "Labor Day",
+    "2031-05-02": "Labor Day",
     "2031-05-04": "Youth Day",
     "2031-06-01": "Children's Day",
     "2031-06-24": "Dragon Boat Festival",
@@ -1269,6 +1289,7 @@
     "2031-10-02": "National Day",
     "2031-10-03": "National Day",
     "2032-01-01": "New Year's Day",
+    "2032-02-10": "Chinese New Year's Eve",
     "2032-02-11": "Chinese New Year (Spring Festival)",
     "2032-02-12": "Chinese New Year (Spring Festival)",
     "2032-02-13": "Chinese New Year (Spring Festival)",
@@ -1276,8 +1297,9 @@
     "2032-04-04": "Tomb-Sweeping Day",
     "2032-04-05": "Tomb-Sweeping Day (observed)",
     "2032-05-01": "Labor Day",
+    "2032-05-02": "Labor Day",
     "2032-05-03": "Labor Day (observed)",
-    "2032-05-04": "Youth Day",
+    "2032-05-04": "Labor Day (observed); Youth Day",
     "2032-06-01": "Children's Day",
     "2032-06-12": "Dragon Boat Festival",
     "2032-06-14": "Dragon Boat Festival (observed)",
@@ -1291,13 +1313,16 @@
     "2032-10-05": "National Day (observed)",
     "2033-01-01": "New Year's Day",
     "2033-01-03": "New Year's Day (observed)",
+    "2033-01-30": "Chinese New Year's Eve",
     "2033-01-31": "Chinese New Year (Spring Festival)",
     "2033-02-01": "Chinese New Year (Spring Festival)",
     "2033-02-02": "Chinese New Year (Spring Festival)",
+    "2033-02-03": "Chinese New Year's Eve (observed)",
     "2033-03-08": "International Women's Day",
     "2033-04-04": "Tomb-Sweeping Day",
     "2033-05-01": "Labor Day",
-    "2033-05-02": "Labor Day (observed)",
+    "2033-05-02": "Labor Day",
+    "2033-05-03": "Labor Day (observed)",
     "2033-05-04": "Youth Day",
     "2033-06-01": "Children's Day; Dragon Boat Festival",
     "2033-08-01": "Army Day",
@@ -1309,13 +1334,16 @@
     "2033-10-05": "National Day (observed)",
     "2034-01-01": "New Year's Day",
     "2034-01-02": "New Year's Day (observed)",
+    "2034-02-18": "Chinese New Year's Eve",
     "2034-02-19": "Chinese New Year (Spring Festival)",
     "2034-02-20": "Chinese New Year (Spring Festival)",
     "2034-02-21": "Chinese New Year (Spring Festival)",
-    "2034-02-22": "Chinese New Year (Spring Festival) (observed)",
+    "2034-02-22": "Chinese New Year's Eve (observed)",
+    "2034-02-23": "Chinese New Year (Spring Festival) (observed)",
     "2034-03-08": "International Women's Day",
     "2034-04-05": "Tomb-Sweeping Day",
     "2034-05-01": "Labor Day",
+    "2034-05-02": "Labor Day",
     "2034-05-04": "Youth Day",
     "2034-06-01": "Children's Day",
     "2034-06-20": "Dragon Boat Festival",
@@ -1326,6 +1354,7 @@
     "2034-10-03": "National Day",
     "2034-10-04": "National Day (observed)",
     "2035-01-01": "New Year's Day",
+    "2035-02-07": "Chinese New Year's Eve",
     "2035-02-08": "Chinese New Year (Spring Festival)",
     "2035-02-09": "Chinese New Year (Spring Festival)",
     "2035-02-10": "Chinese New Year (Spring Festival)",
@@ -1333,6 +1362,7 @@
     "2035-03-08": "International Women's Day",
     "2035-04-05": "Tomb-Sweeping Day",
     "2035-05-01": "Labor Day",
+    "2035-05-02": "Labor Day",
     "2035-05-04": "Youth Day",
     "2035-06-01": "Children's Day",
     "2035-06-10": "Dragon Boat Festival",
@@ -1344,12 +1374,15 @@
     "2035-10-02": "National Day",
     "2035-10-03": "National Day",
     "2036-01-01": "New Year's Day",
+    "2036-01-27": "Chinese New Year's Eve",
     "2036-01-28": "Chinese New Year (Spring Festival)",
     "2036-01-29": "Chinese New Year (Spring Festival)",
     "2036-01-30": "Chinese New Year (Spring Festival)",
+    "2036-01-31": "Chinese New Year's Eve (observed)",
     "2036-03-08": "International Women's Day",
     "2036-04-04": "Tomb-Sweeping Day",
     "2036-05-01": "Labor Day",
+    "2036-05-02": "Labor Day",
     "2036-05-04": "Youth Day",
     "2036-05-30": "Dragon Boat Festival",
     "2036-06-01": "Children's Day",
@@ -1360,15 +1393,18 @@
     "2036-10-04": "Mid-Autumn Festival",
     "2036-10-06": "Mid-Autumn Festival (observed)",
     "2037-01-01": "New Year's Day",
+    "2037-02-14": "Chinese New Year's Eve",
     "2037-02-15": "Chinese New Year (Spring Festival)",
     "2037-02-16": "Chinese New Year (Spring Festival)",
     "2037-02-17": "Chinese New Year (Spring Festival)",
-    "2037-02-18": "Chinese New Year (Spring Festival) (observed)",
+    "2037-02-18": "Chinese New Year's Eve (observed)",
+    "2037-02-19": "Chinese New Year (Spring Festival) (observed)",
     "2037-03-08": "International Women's Day",
     "2037-04-04": "Tomb-Sweeping Day",
     "2037-04-06": "Tomb-Sweeping Day (observed)",
     "2037-05-01": "Labor Day",
-    "2037-05-04": "Youth Day",
+    "2037-05-02": "Labor Day",
+    "2037-05-04": "Labor Day (observed); Youth Day",
     "2037-06-01": "Children's Day",
     "2037-06-18": "Dragon Boat Festival",
     "2037-08-01": "Army Day",
@@ -1378,6 +1414,7 @@
     "2037-10-03": "National Day",
     "2037-10-05": "National Day (observed)",
     "2038-01-01": "New Year's Day",
+    "2038-02-03": "Chinese New Year's Eve",
     "2038-02-04": "Chinese New Year (Spring Festival)",
     "2038-02-05": "Chinese New Year (Spring Festival)",
     "2038-02-06": "Chinese New Year (Spring Festival)",
@@ -1385,8 +1422,9 @@
     "2038-03-08": "International Women's Day",
     "2038-04-05": "Tomb-Sweeping Day",
     "2038-05-01": "Labor Day",
+    "2038-05-02": "Labor Day",
     "2038-05-03": "Labor Day (observed)",
-    "2038-05-04": "Youth Day",
+    "2038-05-04": "Labor Day (observed); Youth Day",
     "2038-06-01": "Children's Day",
     "2038-06-07": "Dragon Boat Festival",
     "2038-08-01": "Army Day",
@@ -1398,13 +1436,16 @@
     "2038-10-05": "National Day (observed)",
     "2039-01-01": "New Year's Day",
     "2039-01-03": "New Year's Day (observed)",
+    "2039-01-23": "Chinese New Year's Eve",
     "2039-01-24": "Chinese New Year (Spring Festival)",
     "2039-01-25": "Chinese New Year (Spring Festival)",
     "2039-01-26": "Chinese New Year (Spring Festival)",
+    "2039-01-27": "Chinese New Year's Eve (observed)",
     "2039-03-08": "International Women's Day",
     "2039-04-05": "Tomb-Sweeping Day",
     "2039-05-01": "Labor Day",
-    "2039-05-02": "Labor Day (observed)",
+    "2039-05-02": "Labor Day",
+    "2039-05-03": "Labor Day (observed)",
     "2039-05-04": "Youth Day",
     "2039-05-27": "Dragon Boat Festival",
     "2039-06-01": "Children's Day",
@@ -1417,13 +1458,16 @@
     "2039-10-06": "National Day (observed)",
     "2040-01-01": "New Year's Day",
     "2040-01-02": "New Year's Day (observed)",
+    "2040-02-11": "Chinese New Year's Eve",
     "2040-02-12": "Chinese New Year (Spring Festival)",
     "2040-02-13": "Chinese New Year (Spring Festival)",
     "2040-02-14": "Chinese New Year (Spring Festival)",
-    "2040-02-15": "Chinese New Year (Spring Festival) (observed)",
+    "2040-02-15": "Chinese New Year's Eve (observed)",
+    "2040-02-16": "Chinese New Year (Spring Festival) (observed)",
     "2040-03-08": "International Women's Day",
     "2040-04-04": "Tomb-Sweeping Day",
     "2040-05-01": "Labor Day",
+    "2040-05-02": "Labor Day",
     "2040-05-04": "Youth Day",
     "2040-06-01": "Children's Day",
     "2040-06-14": "Dragon Boat Festival",
@@ -1433,6 +1477,7 @@
     "2040-10-02": "National Day",
     "2040-10-03": "National Day",
     "2041-01-01": "New Year's Day",
+    "2041-01-31": "Chinese New Year's Eve",
     "2041-02-01": "Chinese New Year (Spring Festival)",
     "2041-02-02": "Chinese New Year (Spring Festival)",
     "2041-02-03": "Chinese New Year (Spring Festival)",
@@ -1441,6 +1486,7 @@
     "2041-03-08": "International Women's Day",
     "2041-04-04": "Tomb-Sweeping Day",
     "2041-05-01": "Labor Day",
+    "2041-05-02": "Labor Day",
     "2041-05-04": "Youth Day",
     "2041-06-01": "Children's Day",
     "2041-06-03": "Dragon Boat Festival",
@@ -1450,6 +1496,7 @@
     "2041-10-02": "National Day",
     "2041-10-03": "National Day",
     "2042-01-01": "New Year's Day",
+    "2042-01-21": "Chinese New Year's Eve",
     "2042-01-22": "Chinese New Year (Spring Festival)",
     "2042-01-23": "Chinese New Year (Spring Festival)",
     "2042-01-24": "Chinese New Year (Spring Festival)",
@@ -1457,6 +1504,7 @@
     "2042-04-05": "Tomb-Sweeping Day",
     "2042-04-07": "Tomb-Sweeping Day (observed)",
     "2042-05-01": "Labor Day",
+    "2042-05-02": "Labor Day",
     "2042-05-04": "Youth Day",
     "2042-06-01": "Children's Day",
     "2042-06-22": "Dragon Boat Festival",
@@ -1468,6 +1516,7 @@
     "2042-10-02": "National Day",
     "2042-10-03": "National Day",
     "2043-01-01": "New Year's Day",
+    "2043-02-09": "Chinese New Year's Eve",
     "2043-02-10": "Chinese New Year (Spring Festival)",
     "2043-02-11": "Chinese New Year (Spring Festival)",
     "2043-02-12": "Chinese New Year (Spring Festival)",
@@ -1475,7 +1524,8 @@
     "2043-04-05": "Tomb-Sweeping Day",
     "2043-04-06": "Tomb-Sweeping Day (observed)",
     "2043-05-01": "Labor Day",
-    "2043-05-04": "Youth Day",
+    "2043-05-02": "Labor Day",
+    "2043-05-04": "Labor Day (observed); Youth Day",
     "2043-06-01": "Children's Day",
     "2043-06-11": "Dragon Boat Festival",
     "2043-08-01": "Army Day",
@@ -1485,6 +1535,7 @@
     "2043-10-03": "National Day",
     "2043-10-05": "National Day (observed)",
     "2044-01-01": "New Year's Day",
+    "2044-01-29": "Chinese New Year's Eve",
     "2044-01-30": "Chinese New Year (Spring Festival)",
     "2044-01-31": "Chinese New Year (Spring Festival)",
     "2044-02-01": "Chinese New Year (Spring Festival)",
@@ -1493,7 +1544,8 @@
     "2044-03-08": "International Women's Day",
     "2044-04-04": "Tomb-Sweeping Day",
     "2044-05-01": "Labor Day",
-    "2044-05-02": "Labor Day (observed)",
+    "2044-05-02": "Labor Day",
+    "2044-05-03": "Labor Day (observed)",
     "2044-05-04": "Youth Day",
     "2044-05-31": "Dragon Boat Festival",
     "2044-06-01": "Children's Day",
@@ -1506,6 +1558,7 @@
     "2044-10-06": "National Day (observed)",
     "2045-01-01": "New Year's Day",
     "2045-01-02": "New Year's Day (observed)",
+    "2045-02-16": "Chinese New Year's Eve",
     "2045-02-17": "Chinese New Year (Spring Festival)",
     "2045-02-18": "Chinese New Year (Spring Festival)",
     "2045-02-19": "Chinese New Year (Spring Festival)",
@@ -1514,6 +1567,7 @@
     "2045-03-08": "International Women's Day",
     "2045-04-04": "Tomb-Sweeping Day",
     "2045-05-01": "Labor Day",
+    "2045-05-02": "Labor Day",
     "2045-05-04": "Youth Day",
     "2045-06-01": "Children's Day",
     "2045-06-19": "Dragon Boat Festival",
@@ -1524,12 +1578,14 @@
     "2045-10-03": "National Day",
     "2045-10-04": "National Day (observed)",
     "2046-01-01": "New Year's Day",
+    "2046-02-05": "Chinese New Year's Eve",
     "2046-02-06": "Chinese New Year (Spring Festival)",
     "2046-02-07": "Chinese New Year (Spring Festival)",
     "2046-02-08": "Chinese New Year (Spring Festival)",
     "2046-03-08": "International Women's Day",
     "2046-04-05": "Tomb-Sweeping Day",
     "2046-05-01": "Labor Day",
+    "2046-05-02": "Labor Day",
     "2046-05-04": "Youth Day",
     "2046-06-01": "Children's Day",
     "2046-06-08": "Dragon Boat Festival",
@@ -1540,6 +1596,7 @@
     "2046-10-02": "National Day",
     "2046-10-03": "National Day",
     "2047-01-01": "New Year's Day",
+    "2047-01-25": "Chinese New Year's Eve",
     "2047-01-26": "Chinese New Year (Spring Festival)",
     "2047-01-27": "Chinese New Year (Spring Festival)",
     "2047-01-28": "Chinese New Year (Spring Festival)",
@@ -1548,6 +1605,7 @@
     "2047-03-08": "International Women's Day",
     "2047-04-05": "Tomb-Sweeping Day",
     "2047-05-01": "Labor Day",
+    "2047-05-02": "Labor Day",
     "2047-05-04": "Youth Day",
     "2047-05-29": "Dragon Boat Festival",
     "2047-06-01": "Children's Day",
@@ -1557,6 +1615,7 @@
     "2047-10-03": "National Day",
     "2047-10-04": "Mid-Autumn Festival",
     "2048-01-01": "New Year's Day",
+    "2048-02-13": "Chinese New Year's Eve",
     "2048-02-14": "Chinese New Year (Spring Festival)",
     "2048-02-15": "Chinese New Year (Spring Festival)",
     "2048-02-16": "Chinese New Year (Spring Festival)",
@@ -1566,7 +1625,8 @@
     "2048-04-04": "Tomb-Sweeping Day",
     "2048-04-06": "Tomb-Sweeping Day (observed)",
     "2048-05-01": "Labor Day",
-    "2048-05-04": "Youth Day",
+    "2048-05-02": "Labor Day",
+    "2048-05-04": "Labor Day (observed); Youth Day",
     "2048-06-01": "Children's Day",
     "2048-06-15": "Dragon Boat Festival",
     "2048-08-01": "Army Day",
@@ -1576,6 +1636,7 @@
     "2048-10-03": "National Day",
     "2048-10-05": "National Day (observed)",
     "2049-01-01": "New Year's Day",
+    "2049-02-01": "Chinese New Year's Eve",
     "2049-02-02": "Chinese New Year (Spring Festival)",
     "2049-02-03": "Chinese New Year (Spring Festival)",
     "2049-02-04": "Chinese New Year (Spring Festival)",
@@ -1583,8 +1644,9 @@
     "2049-04-04": "Tomb-Sweeping Day",
     "2049-04-05": "Tomb-Sweeping Day (observed)",
     "2049-05-01": "Labor Day",
+    "2049-05-02": "Labor Day",
     "2049-05-03": "Labor Day (observed)",
-    "2049-05-04": "Youth Day",
+    "2049-05-04": "Labor Day (observed); Youth Day",
     "2049-06-01": "Children's Day",
     "2049-06-04": "Dragon Boat Festival",
     "2049-08-01": "Army Day",
@@ -1597,14 +1659,17 @@
     "2049-10-05": "National Day (observed)",
     "2050-01-01": "New Year's Day",
     "2050-01-03": "New Year's Day (observed)",
+    "2050-01-22": "Chinese New Year's Eve",
     "2050-01-23": "Chinese New Year (Spring Festival)",
     "2050-01-24": "Chinese New Year (Spring Festival)",
     "2050-01-25": "Chinese New Year (Spring Festival)",
-    "2050-01-26": "Chinese New Year (Spring Festival) (observed)",
+    "2050-01-26": "Chinese New Year's Eve (observed)",
+    "2050-01-27": "Chinese New Year (Spring Festival) (observed)",
     "2050-03-08": "International Women's Day",
     "2050-04-05": "Tomb-Sweeping Day",
     "2050-05-01": "Labor Day",
-    "2050-05-02": "Labor Day (observed)",
+    "2050-05-02": "Labor Day",
+    "2050-05-03": "Labor Day (observed)",
     "2050-05-04": "Youth Day",
     "2050-06-01": "Children's Day",
     "2050-06-23": "Dragon Boat Festival",


Test patch:
diff --git a/tests/countries/test_china.py b/tests/countries/test_china.py
index 6118749f..35f2ee4e 100644
--- a/tests/countries/test_china.py
+++ b/tests/countries/test_china.py
@@ -20,7 +20,7 @@ from tests.common import CommonCountryTests
 class TestChina(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
-        super().setUpClass(China, years=range(1950, 2051), years_non_observed=range(2001, 2025))
+        super().setUpClass(China, years=range(1950, 2050), years_non_observed=range(2001, 2025))
 
     def test_country_aliases(self):
         self.assertAliases(China, CN, CHN)
@@ -30,7 +30,7 @@ class TestChina(CommonCountryTests, TestCase):
         self.assertNoHolidays(China(years=1949, categories=HALF_DAY))
 
     def test_new_years_day(self):
-        self.assertHolidayName("元旦", (f"{year}-01-01" for year in range(1950, 2051)))
+        self.assertHolidayName("元旦", (f"{year}-01-01" for year in range(1950, 2050)))
 
         self.assertNoNonObservedHoliday(
             "2005-01-03",
@@ -53,7 +53,8 @@ class TestChina(CommonCountryTests, TestCase):
             "2012-01-22",
             "2013-02-09",
         )
-        self.assertNoHolidayName(name, range(1950, 2008), range(2014, 2051))
+        self.assertHolidayName(name, range(2025, 2050))
+        self.assertNoHolidayName(name, range(1950, 2008), range(2014, 2025))
 
         self.assertNoNonObservedHoliday(
             "2009-01-28",
@@ -64,7 +65,7 @@ class TestChina(CommonCountryTests, TestCase):
 
     def test_chinese_new_year(self):
         name = "春节"
-        self.assertHolidayName(name, range(1950, 2051))
+        self.assertHolidayName(name, range(1950, 2050))
         self.assertHolidayName(
             name,
             "2021-02-12",
@@ -104,9 +105,11 @@ class TestChina(CommonCountryTests, TestCase):
 
     def test_labor_day(self):
         name = "劳动节"
-        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1950, 2051)))
-        for year in range(2000, 2008):
-            self.assertHolidayName(name, (f"{year}-05-02", f"{year}-05-03"))
+        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1950, 2050)))
+        self.assertHolidayName(
+            name, (f"{year}-05-02" for year in (*range(2000, 2008), *range(2025, 2050)))
+        )
+        self.assertHolidayName(name, (f"{year}-05-03" for year in range(2000, 2008)))
 
         self.assertNoNonObservedHoliday(
             "2003-05-05",
@@ -124,7 +127,7 @@ class TestChina(CommonCountryTests, TestCase):
         name = "国庆节"
         for year in range(1950, 1999):
             self.assertHolidayName(name, (f"{year}-10-01", f"{year}-10-02"))
-        for year in range(1999, 2051):
+        for year in range(1999, 2050):
             self.assertHolidayName(name, (f"{year}-10-01", f"{year}-10-02", f"{year}-10-03"))
 
         self.assertNoNonObservedHoliday(
@@ -152,7 +155,7 @@ class TestChina(CommonCountryTests, TestCase):
 
     def test_qingming_festival(self):
         name = "清明节"
-        self.assertHolidayName(name, range(2008, 2051))
+        self.assertHolidayName(name, range(2008, 2050))
         self.assertNoHolidayName(name, range(1950, 2008))
 
         self.assertHolidayName(
@@ -177,7 +180,7 @@ class TestChina(CommonCountryTests, TestCase):
 
     def test_dragon_boat_festival(self):
         name = "端午节"
-        self.assertHolidayName(name, range(2008, 2051))
+        self.assertHolidayName(name, range(2008, 2050))
         self.assertNoHolidayName(name, range(1950, 2008))
 
         self.assertHolidayName(
@@ -200,7 +203,7 @@ class TestChina(CommonCountryTests, TestCase):
 
     def test_mid_autumn_festival(self):
         name = "中秋节"
-        self.assertHolidayName(name, range(2008, 2051))
+        self.assertHolidayName(name, range(2008, 2050))
         self.assertNoHolidayName(name, range(1950, 2008))
 
         self.assertHolidayName(
@@ -888,6 +891,31 @@ class TestChina(CommonCountryTests, TestCase):
             ("2024-10-07", "休息日（2024-10-12日起取代）"),
         )
 
+    def test_2025_public_holiday(self):
+        # https://www.gov.cn/zhengce/content/202411/content_6986382.htm
+        self.assertHolidays(
+            China(categories=PUBLIC, years=2025),
+            ("2025-01-01", "元旦"),
+            ("2025-01-28", "农历除夕"),
+            ("2025-01-29", "春节"),
+            ("2025-01-30", "春节"),
+            ("2025-01-31", "春节"),
+            ("2025-02-03", "休息日（2025-01-26日起取代）"),
+            ("2025-02-04", "休息日（2025-02-08日起取代）"),
+            ("2025-04-04", "清明节"),
+            ("2025-05-01", "劳动节"),
+            ("2025-05-02", "劳动节"),
+            ("2025-05-05", "休息日（2025-04-27日起取代）"),
+            ("2025-05-31", "端午节"),
+            ("2025-06-02", "端午节（观察日）"),
+            ("2025-10-01", "国庆节"),
+            ("2025-10-02", "国庆节"),
+            ("2025-10-03", "国庆节"),
+            ("2025-10-06", "中秋节"),
+            ("2025-10-07", "休息日（2025-09-28日起取代）"),
+            ("2025-10-08", "休息日（2025-10-11日起取代）"),
+        )
+
     def test_2022_half_day_holiday(self):
         self.assertHolidays(
             China(categories=HALF_DAY, years=2022),