Saju vs Bazi: what actually differs?
The short, honest version — from the code, not folklore.
The short answer
Almost nothing in the arithmetic. Saju (사주, Korean) and Bazi (八字, Chinese) name the same chart — four pillars, eight characters, built from the year, month, day and hour you were born. Korea inherited the system from China centuries ago and gave it a Korean name; the pillars themselves are computed the same way either side of the border. In Bokki's code there is exactly one function, getFourPillars(), and it has no “tradition” argument. Ask it for Seoul or for Beijing and it runs the identical steps. What genuinely changes between the two is not the formula — it is how far your birthplace sits from the meridian your country keeps clock time by, and that turns out to matter more than the label on the chart.
One function, not two traditions
getFourPillars(birthDate, birthTime, placeId) takes a date, a clock time, and a place — never a tradition. Every pillar it returns comes from the same Julian-Day arithmetic and the same 24 solar terms (절기) for the month boundary and 立春 for the year boundary, whether the birthplace is Seoul or Beijing. Pick two cities and for most birth minutes the year, month and day pillars come out identical: for a birth at 07:25 on 20 March 1995, Seoul and Beijing both give 乙亥 年 · 己卯 月 · 庚戌 日. The hour pillar is the one that moves most often — but it is not the only one that can. All four boundaries are read at the birthplace, so all four can split between two cities. The day turns at true solar midnight, and on 20 March 1995 Seoul's falls 18 minutes after Beijing's, so a birth that day between 00:22 and 00:39 is 己酉 日 in Seoul and 庚戌 日 in Beijing. The month and year turn at the solar-term boundaries (節) — single instants that each city reads on its own clock. 立春 1995 sits at 15:12:51 on the almanac's own UTC+8 table, which is 16:12:51 in Seoul, so on 4 February 1995 every clock reading from 15:13 to 16:12 is already past the boundary in Beijing but not yet past it in Seoul: a Seoul birth is 甲戌 年 · 丁丑 月 where a Beijing birth is 乙亥 年 · 戊寅 月.
Where it genuinely diverges — true solar time
The hour pillar uses apparent solar time at the birthplace, not the clock: your longitude against the timezone meridian, plus the equation of time. Korea keeps time on the 135°E meridian even though the country sits at 126–129°E, so the correction is a steady −32 to −40 minutes almost everywhere. China keeps one time zone on the 120°E meridian, close to its populous eastern coast, so the correction there is usually much smaller: our own PLACES table gives Seoul −40 minutes and Beijing −22 minutes for the same date. That gap is large enough to flip an hour branch. Run the same clock time, 07:25 on 20 March 1995, through Bokki twice: born in Seoul, the corrected time is 06:45, before the 07:00 boundary, giving hour pillar 己卯; born in Beijing, it is 07:03, after the boundary, giving 庚辰. Same formula, same clock time, different city — different hour pillar.
A boundary the two traditions argue about among themselves — 子時
There is one more place the answer can split, and it is not a Korea-versus-China line at all: how to treat 子時, the two hours (23:00–01:00) that straddle midnight. One school, 야자시 (晚子時, “late zi”), keeps the day pillar where it is and takes the hour stem from the next day. Another, 자정 (子正), rolls the day pillar itself over at midnight. Both conventions are argued inside Korean Saju circles and inside Chinese Bazi circles — this split runs through each tradition, not between them. Bokki's calendar library defaults to 야자시, and we pinned that choice with a regression test so a library upgrade cannot silently flip it on us.
What we don't calculate
There is no “Bazi mode” toggle in Bokki — if you want to compare the two traditions for real, the only input that changes anything is the birthplace. Beyond that: we compute exactly four special stars (천을귀인, 도화, 역마, 화개), not the much longer catalogues either tradition also keeps (양인살, 괴강살, 원진살, and more). We do not pick one school's strength method over another's — 억부 and 조후 are both in the engine, laid out in our 용신 article, but 병약, 통관 and 종격 are not. Summer time is taken back out the same way for both countries — Korea's 1948–51, 1955–60 and 1987–88 and China's 1986–91 come from the IANA time-zone database, not from a rule either tradition owns — though a birth in the doubled or skipped hour on the day a clock changed should still be checked against a second source. And we never rank Saju above Bazi or the reverse — they are one chart with two names, and the honest differences are the ones above, not a verdict on which is “more correct.”
Closing note — one function, an 18-minute gap, one flipped branch
In short: getFourPillars() never asks which tradition it is running, so 20 March 1995 comes out 乙亥 · 己卯 · 庚戌 for the year, month and day pillars whether the birthplace is Seoul or Beijing — the entire measured difference lives in one input, the meridian gap between where a country puts its clock (135°E for Korea, 120°E for China) and where its population actually sits. That gap runs Seoul −40 minutes and Beijing −22 minutes for the same date, an 18-minute spread that is exactly enough to carry the same 07:25 clock time across the 07:00 hour-branch boundary in one city and not the other — 己卯 in Seoul, 庚辰 in Beijing, from identical arithmetic run on identical minutes. The one split that could be mistaken for a Korea-versus-China line — 야자시 versus 자정 at the 子時 boundary — turns out not to be one: both conventions are argued inside Korean Saju circles and inside Chinese Bazi circles, so Bokki's choice of 야자시 is pinned by a regression test rather than presented as a national rule. And the same four special stars, the same two strength methods and the same summer-time handling apply to a Seoul chart and a Beijing chart alike — nothing on this page treats one tradition as more complete than the other, because the code genuinely does not.