Repository: vacanza/holidays
Pull request #2125 (2024-11-13 22:50:43)

Bump sphinx-rtd-theme from 3.0.1 to 3.0.2
Bumps [sphinx-rtd-theme](https://github.com/readthedocs/sphinx_rtd_theme) from 3.0.1 to 3.0.2.
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a href="https://github.com/readthedocs/sphinx_rtd_theme/blob/master/docs/changelog.rst">sphinx-rtd-theme's changelog</a>.</em></p>
<blockquote>
<h1>3.0.2</h1>
<ul>
<li>Show current translation when the flyout is attached</li>
<li>Fix JavaScript issue that didn't allow users to disable selectors</li>
</ul>
<p>.. _release-3.0.1:</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/readthedocs/sphinx_rtd_theme/commit/5f03347239fd22a241a5b609ddb2f964c8b429aa"><code>5f03347</code></a> Release 3.0.2</li>
<li><a href="https://github.com/readthedocs/sphinx_rtd_theme/commit/17c0685be9f7c032c454a6dd4110bfc3892b7e06"><code>17c0685</code></a> Attached flyout: show the current translation (<a href="https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1629">#1629</a>)</li>
<li><a href="https://github.com/readthedocs/sphinx_rtd_theme/commit/5db7796b6e9928cd12b9e0f7a0b74b79af7bccc5"><code>5db7796</code></a> Allow disabling selectors (<a href="https://redirect.github.com/readthedocs/sphinx_rtd_theme/issues/1626">#1626</a>)</li>
<li>See full diff in <a href="https://github.com/readthedocs/sphinx_rtd_theme/compare/3.0.1...3.0.2">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=sphinx-rtd-theme&package-manager=pip&previous-version=3.0.1&new-version=3.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>

sonarcloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2125) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2125&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2125&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2125&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2125&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2125&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2125)



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/requirements/docs.txt b/requirements/docs.txt
index b6cc3044..1fd9b7f1 100644
--- a/requirements/docs.txt
+++ b/requirements/docs.txt
@@ -1,6 +1,6 @@
 # Documentation requirements.
 
 python-dateutil==2.9.0.post0
-sphinx-rtd-theme==3.0.1
+sphinx-rtd-theme==3.0.2
 sphinx==7.4.7  # keep the version until sphinx-rtd-theme starts supporting sphinx>=8
 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),