Конвенції BaZi
Введіть один момент народження в два калькулятори BaZi і отримаєте дві різні карти. Іноді різного денного господаря, тобто ієрогліф, на якому побудовано все читання. Це не помилка одного з них. Під кожною картою лежать чотири конвенції, у кожної є історія, і калькулятори застосовують їх мовчки і по-різному.
Нижче наша відповідь по кожній з чотирьох. Вони оголошені в полі disclaimer кожної відповіді, тому їхня зміна це breaking change, а не рефакторинг.
1. Де починається рік: Lichun чи китайський Новий рік
Section titled “1. Де починається рік: Lichun чи китайський Новий рік”Наша відповідь: Lichun (立春), точний момент.
BaZi це сонячна система всередині місячно-сонячного календаря. Місячні стовпи прив’язані до двадцяти чотирьох сонячних термінів, тобто до положень Сонця, а не фаз Місяця, і рік іде за тією ж логікою: він повертається на Lichun, приблизно 4 лютого. Китайський Новий рік це інше: перший молодик місячного року, він гуляє від кінця січня до кінця лютого.
Народження в проміжку належить одній тварині за одним правилом і іншій за другим. Обидва правила справжні. Ми беремо Lichun, і момент береться з ефемерид, а не з дати “4 лютого”.
2. Де починається доба: 23:00 чи опівніч
Section titled “2. Де починається доба: 23:00 чи опівніч”Наша відповідь: 23:00 за годинником місця народження.
Традиційна доба це дванадцять подвійних годин, і перша з них, година 子, іде з 23:00 до 01:00. Всі інші вкладаються в один календарний день. Година 子 сидить верхи на опівночі, і з цього єдиного структурного факту росте вся суперечка: якщо година 子 відкриває добу, народження о 23:30 вже належить завтрашньому дню.
Це та вісь, яка змінює денного господаря. Пересунувши стовп дня, ви не уточнили карту, ви замінили її.
Тому інше прочитання ніколи не ховається. Кожен маршрут карти приймає dayBoundary: "23:00" | "midnight" (типово 23:00), а народження в годину 23:00 повертається з alternateDay: стовп дня і денний господар за правилом, яке ви не обрали. Стовп години однаковий за обома, бо пізня година 子 бере стовбур від наступного дня в будь-якому разі. З 00:00 до 00:59 усі школи згодні щодо дня, тож альтернативи там немає.
3. Чи виправляється годинник під довготу місця
Section titled “3. Чи виправляється годинник під довготу місця”Наша відповідь: за запитом, і тільки для дня і години.
Більшу частину історії цієї системи питання не могло виникнути: місцевий час і був сонячним. Часові пояси це винахід епохи залізниць, і щойно країна живе за одним годинником, той годинник збігається з Сонцем лише на одному меридіані. Китай крайній випадок: один пояс на шістдесят градусів довготи, тож народження в Кашгарі відстоїть від сонячного полудня майже на три години за пекінським годинником.
curl -X POST https://api.astroway.info/v1/chinese/true-solar-time \ -H "X-Api-Key: aw_live_..." \ -H "Content-Type: application/json" \ -d '{ "date": "1995-06-15", "time": "09:20:00", "timezoneOffset": 8, "longitude": 75.9 }'4. Що робити з літнім часом
Section titled “4. Що робити з літнім часом”Наша відповідь: це знає тільки той, хто викликає.
Поле timezoneOffset це зсув, за яким фактично йшов годинник у момент народження. Пекінське народження 1988 року йшло за UTC+9, а не +8, бо Китай тримав літній час з 1986 по 1991. Жодна арифметика на нашому боці не відновить цього з самої дати, тому ми не вгадуємо.
5. Що відповідь каже про себе
Section titled “5. Що відповідь каже про себе”Кожен маршрут карти, /v1/bazi/chart, маршрути аналізу, day-master, ten-gods, luck-pillars, yearly і monthly, повертає об’єкт conventions: межі року і місяця (lichun, jie), використану dayBoundary, чи застосовано істинний сонячний час і на скільки хвилин, пояс зі зсувом і чи діяв літній час, а також дату китайського Нового року в григоріанському році народження. timezone.assumed: true означає, що ні пояс, ні зсув не надіслано, і межі прочитано за пекінським часом.
Дата без часу читається опівдні. Коли Lichun або 節 припадає на цю місцеву добу, відповідь залежить від години, тож відповідь додає boundaryInDay: вид межі, місцевий момент, на який бік потрапив полудень, і стовпи року та місяця з обох боків.
Самі моменти меж, 1900-2100
Section titled “Самі моменти меж, 1900-2100”Кожен стовп року й місяця залежить від моменту Lichun та решти одинадцяти 節, тож ці моменти звірено з двома джерелами, які не мають спільного коду з нашим. Дванадцять термінів, що відкривають місяці, для кожного року з 1900 по 2100, тобто 2 412 моментів, знайдено незалежно через JPL Horizons (DE441) з точністю до сотої секунди. Наші моменти збігаються з ними в межах 4 секунд з 1950 по 2025 рік і в межах 8 секунд аж до 1900. Після 2025 року обидві сторони мусять прогнозувати, як дрейфуватиме обертання Землі, і прогнози повільно розходяться, до 21 секунди у 2100.
Дати тих самих термінів за UTC+8 звірено з таблицями Гонконзької обсерваторії за 1901-2100. Збігаються 2 398 з 2 400. Дві відмінні, Daxue 1917 і Bailu 1927, припадають на кілька хвилин після опівночі, і Horizons там на боці нашої дати.
Прогон по зовнішньому датасету
Section titled “Прогон по зовнішньому датасету”Jade Almanac опублікував під CC0 порівняння восьми реалізацій на тринадцяти зондах, спеціально побудованих на цих чотирьох осях: jadealmanac.com/bazi-calculator/conventions. Датасет міряє конвенції, а не правильність, і сам про це каже.
Ми прогнали свій POST /v1/bazi/four-pillars по всіх тринадцяти. Результат відтворюється командою в репозиторії і зафіксований тестом.
| Зонд | Що ізолює | Наша відповідь |
|---|---|---|
1985-02-10 | межа року | Yi-Chou, бо Lichun уже минув |
1990-06-15 23:30 | перехід доби | день Ren-Zi: доба вже перейшла |
1988-02-04 23:00 | Lichun і 23:00 разом | Wu-Chen Jia-Yin Geng-Yin Bing-Zi |
1995-06-15 09:20 Кашгар | істинний сонячний час | без поправки Yi-Si, з поправкою Gui-Mao |
Одна чесна примітка про те, з ким саме ми збігаємось. Видавець датасету пише, що його рушій стоїть на tyme4ts, а lunar-javascript того самого автора. Отже три верхні рядки таблиці це одна лінія, а не три незалежні голоси. Серед незалежних від неї повне покриття має feng-shui-institute.org, і після відвантаження істинного сонячного часу ми відтворюємо його відповідь на всіх трьох зондах, де він застосовує поправку.
Справжня розбіжність зі школою в нас лишається одна: перехід доби о 23:00.