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.
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
Inconsistent Time Zone Assumptions: Naive datetime will drift if parsed locally; uniformly assume "input is Beijing Time", first supplement time zone, then calculate.
Duplicate Correction: True solar time formula is only allowed to appear once; secondary correction is strictly prohibited in the call chain.
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.