How it is calculated
Four Pillars is arithmetic before it is interpretation. This page describes exactly what this calculator computes, in what order, and where it stops being certain.
A birth moment passes through four corrections
A clock time is not a position of the sun. Turning one into the other takes four steps, and each one is applied to a different part of the chart.
| Step | From | To | Using |
|---|---|---|---|
| 1 | Place of birth | Coordinates and time zone | GeoNames |
| 2 | Local clock time | UTC | IANA tzdata |
| 3 | UTC | Local mean solar time | longitude Γ· 15 |
| 4 | Local mean solar time | Local apparent solar time | equation of time |
The equation of time is the gap between clock noon and the moment the sun is actually highest. It swings roughly Β±16 minutes across a year.
Not every pillar uses every step. Applying all four to all four pillars is the most common way to get this wrong.
- Year and month pillars compare two absolute instants, so they stop at step 2. A solar term begins at one moment for the whole planet; the birth is converted to UTC and compared there.
- Day and hour pillars are about where the sun sits in your sky, so they use all four steps.
Where each pillar changes
Year
The Saju year turns at Start of Spring (the sun reaching 315Β° of ecliptic longitude), not on 1 January and not at Lunar New Year. Someone born on 20 January still belongs to the previous year pillar.
The margin can be very small. Start of Spring in 2021 fell 56 seconds before midnight, so only about 0.1% of that day carried the new year pillar.
Month
Month pillars follow the twelve sectional terms β Start of Spring, Awakening of Insects, Pure Brightness, Start of Summer, Grain in Ear, Minor Heat, Start of Autumn, White Dew, Cold Dew, Start of Winter, Major Snow, Minor Cold. The twelve mid terms, such as Rain Water and the equinox, do not move the month pillar. Calendar months are not used at all.
Day
Day pillars are a plain 60-day cycle with no dependence on solar terms:
(Julian day number + 49) mod 60. The offset was fixed by checking
80 sampled dates from 1900 to 2049 against the Korean Astronomy and Space
Science Institute's lunar-solar calendar service. Exactly one offset value
satisfied every sample.
The day boundary is true solar midnight, not clock midnight. In Seoul that falls near 00:32, so a birth at 00:15 local clock time still belongs to the previous day pillar. About 2.5% of births in Korea land in that window, where this calculator and a clock-midnight table will disagree. That is a stated methodological choice, not an error on either side.
Hour
Hour pillars are two-hour segments of apparent solar time. The optional late-zi convention, which starts the day at 23:00 rather than midnight, is also measured in apparent solar time β so "23:00" is not 23:00 on your clock.
Solar terms are computed once, not guessed
Term instants for 1899 to 2101 are computed ahead of time and stored β 4,872 entries. At runtime the engine does a binary search over that table instead of any astronomy at all.
The positions come from astronomy-engine (MIT licence). Checking its output against six published equinox and solstice times gave a maximum deviation of 0.7 minutes, and those published values are themselves rounded to the minute. The table was cross-checked against the Korean Astronomy and Space Science Institute's published term times; the handful of discrepancies found are recorded rather than silently smoothed over.
Places
Cities come from GeoNames β 235,046 entries down to roughly 500 inhabitants, each carrying its own IANA time zone. Small towns matter here: charts are often cast for parents and grandparents, and those generations were more often born outside cities.
When two places share a name, this calculator asks. It never picks one for you. Springfield, Illinois and Springfield, Massachusetts produce different day or hour pillars for about 9% of a day.
What we cannot know
Time zones before 1970 are not guaranteed. The IANA time zone database splits zones by whether they agreed after 1970. Places that differed before then are merged. In 1955 New York observed daylight saving from April to October while Detroit did not, and both are US Eastern; only locations with their own zone keep that distinction.
This is a limit of the underlying data, not something a calculator can repair. For births before 1970 outside Korea, treat the hour pillar as less certain than the rest of the chart.
Two more honest limits:
- Korean records before 1962 are ambiguous about whether a stated time meant the local standard of the day or the modern one. The difference is 30 minutes to an hour, which is exactly the size that flips a month boundary.
- Before standard time was adopted, the engine falls back to local mean time β Seoul returns +8:27:52 for dates before 1908. That is correct behaviour for the period, not a bug.
The same input always gives the same result
Nothing here is random and nothing is generated on the fly. The same birth data returns the same chart, the same signals and the same wording, today and next year.
Every response carries engine versions and content hashes for the rule tables it used, so a reading can be traced back to the exact rules that produced it. Those values are in the API response even though the reading screen does not display them.
Interpretation is separate from calculation. The chart, the strength assessment and the signals are produced by versioned rules. A language model is used only to connect and smooth the sentences those rules already chose β it cannot compute a chart, change a judgement, or introduce a claim that was not in its input. When its output fails validation, the fixed rule sentences are shown instead.
What this does not do
It does not predict events, name dates for outcomes, or offer medical, financial or legal advice. It reports a structure and describes tendencies with the reasoning attached. The interpretation rules are our own heuristics and have not been calibrated against expert consensus or outcome data; that status is published with every reading rather than implied away.