A Holiday That Moves
Our public holidays repeat on the same date every year. Six of Japan's sixteen are not on a date — and the first year is correct, which is the problem.
A public holiday in our system is a date with a "recurring" flag on it. Set the flag and we generate the same month and the same day in every subsequent year. That is correct for the first of January, correct for most countries most of the time, and wrong for six of Japan's sixteen national holidays — in a way that works perfectly for twelve months and then quietly stops.
Four Mondays that are not a date
Since 2000, four Japanese holidays have been fixed to the nth Monday of a month rather than to a calendar date, under the reform that moved them there to create three-day weekends. Coming of Age Day is the second Monday of January. Marine Day is the third Monday of July. Respect for the Aged Day is the third Monday of September. Sports Day is the second Monday of October.
Enter any of them as a recurring holiday and the first year is right, because you typed this year's date. The next year it lands on a Tuesday. The year after that, a Wednesday. Nothing errors, nothing warns, and the calendar continues to look maintained.
And two that nobody can compute
The other two are stranger and, honestly, better. Vernal Equinox Day and Autumnal Equinox Day are set by astronomical calculation, and the dates are not formally fixed until the national observatory publishes its almanac in February of the preceding year.
So these are public holidays whose date is genuinely not knowable far in advance. There is no rule to encode, and a formula that appeared to compute them would be a confident guess about a national holiday. Every system in the world handles these the same way — somebody enters them once a year — and any vendor claiming otherwise is describing an approximation.
Two different problems wearing the same coat
The Monday holidays are a missing rule: "the second Monday of January" is expressible, we simply cannot express it. The equinoxes are not a missing rule, because there is no rule. Conflating them makes the second look like a gap and the first look unavoidable, and both readings are wrong.
Why a wrong holiday is worse than a missing one
A holiday nobody entered is visibly absent. Somebody notices on the day. A holiday entered wrongly is a working Tuesday marked closed and a national holiday marked open, and it propagates: leave balances are computed against working days, availability is computed against working days, and anything scheduled to land on the next working day lands on the wrong one.
None of that fails loudly. It produces small, defensible-looking discrepancies in numbers that people trust — which is the same shape as a dormant database column, and it is worth recognising the pattern rather than the instance.
The three questions worth asking any system
- Is your recurrence a rule or a repeated date? Enter a holiday that falls on the second Monday of a month, then look at what the system thinks it is twelve months later. This takes one minute and it is the entire test.
- What reads the holiday list? A calendar that only decorates a screen is harmless. One that feeds leave accrual, availability and scheduling propagates whatever it is wrong about, so the blast radius is the real question rather than the field.
- What happens to a holiday that is announced rather than derived? If the answer involves a formula, be suspicious. If the answer is "somebody enters it", that is correct, and the follow-up is whether anything reminds them.
What we do about it, stated plainly
An nth-weekday recurrence is a small, well-understood piece of work and it is on our commissionable list with a price rather than a date. The equinoxes are not on any list and never will be, because there is nothing to build — that is a yearly entry in every system, including the expensive ones.
Until the rule exists, the correct answer for a Japanese organization is tedious and worth doing: enter the six as dated one-offs each year rather than as recurring entries. Tedious and right beats automatic and drifting, and the difference only shows up in the second year — which is exactly when nobody is looking.