Stems and branches, 干支 (gānzhī), are sixty two-character names that the Chinese calendar gives in turn to years, months, days and hours, and each level changes name at its own moment. We compared every date from 1901 to 2100 under the two common year rules. They gave different year pairs on 1,482 of 73,049 days, about 2%. The month rules differed on 23.5% of ordinary days, and leap-month days, another 2.9%, got no month pair at all under the rule we inferred from Korea's state astronomy institute. The counts are of calendar days rather than births. The Hong Kong Observatory changes the year pair at Lunar New Year, bazi charts change it at Lichun, and the day count follows neither.
Only odd stems meet odd branches in the cycle
The ten stems run 甲乙丙丁戊己庚辛壬癸 and the twelve branches 子丑寅卯辰巳午未申酉戌亥. Both advance one step at a time, so odd-numbered stems only ever meet odd-numbered branches and even meet even. The cycle therefore closes at 60, the lowest common multiple of ten and twelve, rather than 120. So 甲子 exists and 甲丑 does not. Our guide to bazi's four pillars sets out the tables.
The day pair is arithmetic: the Julian day number plus 49, modulo 60, where 0 is 甲子. For 1 January 2000, day number 2,451,545, that gives 54, or 戊午. The Korea Astronomy and Space Science Institute's calendar service (KASI) agrees, and matched the formula on all 16 dates we sampled from 1701 to 2026.
Official calendars change the year pair at Lunar New Year
A Hong Kong Observatory forecaster's blog of 15 February 2018 says the Observatory has always changed the year pair at 正月初一, 0:00 Hong Kong Standard Time, and that the rules in China's standard of 12 May 2017 are consistent with the ones it has long used. An Observatory article of April 2018 describes the Lichun rule as a preference of some astrology enthusiasts, 「與官方曆法明顯不同」, clearly different from the official calendar.
Academia Sinica's calendar converter puts 5 February 2024 in the 癸卯 year, 26th day of the 12th month. KASI agrees on 癸卯 and gives 乙丑 for the month and 己亥 for the day.
Bazi charts switch years at the moment of Lichun
Lichun, Spring Commences, is a solar term on 3, 4 or 5 February; Lunar New Year follows the moon.
| Year rules compared | Days with different pairs, 1901–2100 | Share |
|---|---|---|
| Lichun against Lunar New Year | 1,482 of 73,049 | 2.03% |
| Lichun against 1 January | 6,895 of 73,049 | 9.44% |
That averages 7.41 days a year, with a widest gap of 16 days in 1985 and none in six years. Neither rule reliably comes first: Lichun's date fell earlier in 103 years, Lunar New Year's in 91, and they shared a date in 6, so a gap can open on either side, anywhere between about 21 January and 19 February.
On our modelled calendar, since Vietnam moved to UTC+7 in 1968 its Lunar New Year has fallen on a different date from China's in 6 years up to 2100, and Lichun in 6. In 1985 the festivals were a month apart, 21 January in Vietnam and 20 February in China.
Solar-term and lunar months give different month pairs on nearly a quarter of days
Bazi opens each month at a solar term; a lunar month opens at a new moon. KASI's output suggests a simple rule for labelling lunar months. It seems to use the month number, set the stem from the lunar year's stem, and leave leap months unpaired. That rule matched KASI on 11 of 11 ordinary samples, and all 3 leap-month samples were blank. This describes Korea's institute only; we have not established how almanacs elsewhere label months. Our count numbers months by the Chinese calendar.
| Solar-term months against lunar months, 1901–2100 | Days | Share |
|---|---|---|
| Ordinary days, different pairs | 16,644 of 70,912 | 23.5% |
| Leap-month days, no pair | 2,137 of 73,049 | 2.9% |
| Either | 18,781 of 73,049 | 25.7% |
Where the pairs differ, they differ by one step, 8,280 days one way and 8,364 the other. Mixing rules is worse: a Lunar New Year year with a solar-term month gives a month stem the year cannot have on all 1,482 days when the year rules disagree, such as 癸卯 with 丙寅 on 5 February 2024; a 癸 year's 寅 month is 甲寅.
Most eclipse records from 720 BC fit today's day count
The Chunqiu, the annals of the state of Lu, records solar eclipses by day pair. Its first, in the third year of Duke Yin, reads 「己巳,日有食之」 in the Wikisource transcription. NASA's Five Millennium Catalog lists an eclipse on 22 February 720 BC (Julian), 993,049 days before 1 January 2000, and the formula above gives that date 己巳.
Others got there first. As Saito and Ozawa's 1987 study summarises, earlier scholars had matched 33 of the 37 Chunqiu eclipses to Oppolzer's canon and set four aside; the study made two of those four real eclipses by changing only the year number, keeping the day names. Our re-run on NASA's catalogue found 34 entries carrying a day pair, and 29 matched exactly at Qufu local time. Shifted to any of the other 59 offsets, the count matched 8 at best, 0.73 on average. Four missed, among them both of Saito and Ozawa's re-dated cases, and one was a day off. A catalogue match does not prove the eclipse was seen in Lu, and 34 points show the count consistent only where it was tested.
Sources differ on whether the day pair turns an hour before midnight
The 子 hour starts at 23:00, and schools differ on whether the day does too, as our guide to birth chart conventions sets out. Enter 1 January 2000 at 23:30 in our Tian Gan Di Zhi converter. It keeps the day as 戊午 until midnight, says that schools starting the day at 23:00 give 己未, and gives 甲子 as the hour either way. The lunar-javascript library's two settings show the same split: at 23:30 on all 10,958 days of 2000–2029 they gave the same hour pair and a different day pair.
Until 2 November 2026 our converter took the year from Lunar New Year and the month from Lichun, which printed combinations like 癸卯 with 丙寅 on about seven days a year. The rebuild that day added the hour pair, and until 3 November 2026 its 23:00 note offered 壬子 as another school's hour, for which we found no source.
Singapore's clock changes move the hour pair in older records
The hour pair depends on the local time standard in effect when the time was recorded. The tz database has Singapore on UTC+7:30 from September 1945 until the last day of 1981. A time from those years read as UTC+8 shifts by half an hour, which moves 360 of the day's 1,440 minutes, 25%, into a different two-hour block. From February 1942 to September 1945 clocks ran at UTC+9, an hour ahead, and on our arithmetic that moves half of all minutes. Our guide to Singapore birth times and the sun adds a further correction. A birth certificate or family register gives the clock time of its day, and its year decides which clock that was.