|
|
@@ -1,32 +0,0 @@
|
|
|
-# True Solar Time Correction Experience (2025-12-16)
|
|
|
-
|
|
|
-## Background
|
|
|
-- Feedback from Xinjiang users: The report shows "solar calendar minus 2 hours, true solar time again minus 2 hours", resulting in inconsistencies in Four Pillars/Deities with comparison tools.
|
|
|
-- Root cause: Birth time was calculated once for true solar time by the caller, and then calculated again within `BaziCalculator`, forming a "double deduction".
|
|
|
-
|
|
|
-## Current Strategy (Live)
|
|
|
-- **Single Correction Point**: All true solar time corrections are performed only once within `BaziCalculator`.
|
|
|
-- **Time Baseline**: Entry birth time is uniformly treated as Beijing Time (Asia/Shanghai), and then true solar time correction is performed after assigning the time zone with `ensure_cn`.
|
|
|
-- **Calculation Time**: Core and extended modules are all based on `calc_dt` (true solar time or original Beijing time if user disables), maintaining consistency.
|
|
|
-- **Display Time**: UI/progress/logs/queue/Help uniformly use Beijing Time; report field `trueSolarTime` displays the time after longitude correction.
|
|
|
-
|
|
|
-## Involved Changes (Key Points)
|
|
|
-- `utils/timezone.py`: `now_cn/ensure_cn/fmt_cn` fixed to Asia/Shanghai.
|
|
|
-- `bot.py`: Removed outer layer `calc_true_solar_time`; time display uses `fmt_cn(now_cn())`; queue timestamp uses Beijing Time.
|
|
|
-- `main.py`: API no longer pre-corrects; `trueSolarTime` is taken from `BaziCalculator` internal results.
|
|
|
-- `bazi_calculator.py`: Added `use_true_solar_time`, unified `calc_dt`; extended modules/Ming Gua/Xiao Yun, etc., now use `calc_dt`; metadata time uses Beijing Time.
|
|
|
-- `liuyao.py`, `qimen.py`, `system_optimization.py`: Timestamps unified to Beijing Time.
|
|
|
-- Documentation: `AGENTS.md` records "Time zone unified to Asia/Shanghai".
|
|
|
-
|
|
|
-## Abstract Problems and Prevention
|
|
|
-1. **Inconsistent Time Zone Assumptions**: Naive datetime will drift if parsed locally; uniformly assume "input is Beijing Time", first supplement time zone, then calculate.
|
|
|
-2. **Duplicate Correction**: True solar time formula is only allowed to appear once; secondary correction is strictly prohibited in the call chain.
|
|
|
-3. **Mixed Baselines**: Display uses Beijing Time, calculation uses true solar time (single correction). If a new module is added, `calc_dt` must be reused, no self-calculation is allowed.
|
|
|
-
|
|
|
-## Verification Suggestions
|
|
|
-- Run a Xinjiang example (Urumqi 87E, 08:00): Solar calendar should remain 08:00, Beijing time displays 08:00, true solar time approx. 05:4x, only deducted once.
|
|
|
-- Compare Four Pillars/Deities with comparison tools such as "Cece", should be consistent.
|
|
|
-
|
|
|
-## Subsequent Guidelines
|
|
|
-- If UTC/other time zones need to be provided externally, first convert to Beijing time, then calculate true solar time based on longitude, still only correcting once.
|
|
|
-- When adding new integration modules, it is forbidden to repeatedly calculate true solar time; uniformly accept `calc_dt`.
|