Skip to content

Fix monthly week counts for wrapped week starts - #33

Closed
sakura168899-debug wants to merge 1 commit into
6tail:masterfrom
sakura168899-debug:fix/month-week-start
Closed

sakura168899-debug wants to merge 1 commit into
6tail:masterfrom
sakura168899-debug:fix/month-week-start

Conversation

@sakura168899-debug

Copy link
Copy Markdown

問題

SolarUtil.getWeeksOfMonth() 在月初的星期數小於每週起點 start 時,會少算一週。

例如以星期一為起點,2021 年 8 月共有 6 個日曆週,但目前回傳 5。這也影響 SolarWeek.next(-1, True):從 2021 年 9 月第一週往前切換,會直接跳到 8 月第五週,漏掉 8 月 30、31 日所在的最後一週。

from lunar_python import SolarWeek
from lunar_python.util import SolarUtil

SolarUtil.getWeeksOfMonth(2021, 8, 1)  # 目前為 5,應為 6
SolarWeek.fromYmd(2021, 9, 1, 1).next(-1, True).toString()
# 目前為 '2021.8.5',應為 '2021.8.6'

修正

將負的週起點偏移量加上一週,與 SolarWeek.getIndex() 現有處理一致。沒有更動 API、農曆換算或八字判讀規則,也沒有新增第三方依賴。

驗證

  • 修正前:新增的週數與跨月倒退測試均失敗。
  • 修正後:python -m unittest discover -s test -p "*Test.py",244 個測試通過(本機 Python 3.12.14)。
  • 新增的比對測試涵蓋 2020、2021 全月份及 7 種每週起點,共 168 組,以 Python 標準函式庫 calendar 為比對依據。
  • 另做 2000–2399 年全部月份與 7 種起點的 33,600 組交叉檢查,結果全部一致。
  • git diff --check 通過。

這份修正與測試使用 AI 協助產出;以上數字來自本機實際執行,不代表上游 CI 已通過。

@6tail

6tail commented Oct 15, 2026

Copy link
Copy Markdown
Owner

我是刻意这么设计的,比如要查某天位于当年的第几周,并不是简单的把每个月的周数都加起来。两个月共用一周的时候,是只算一周,用上月的最后一周或下月的第一周,其实都是同一个周。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants