I maintain an Elixir library (Calendrical) that does this. England, for example, is just three segments spliced onto a Julian base:
defmodule England do
use Calendrical.Composite,
calendars: [
~D[1155-03-25 Calendrical.Julian.March25], # year starts on Lady Day
~D[1751-03-25 Calendrical.Julian.Jan1], # New Year moved to Jan 1
~D[1752-09-14 Calendrical.Gregorian] # the 11-day jump
],
base_calendar: Calendrical.Julian
end
The "missing" days simply aren't valid dates, and stepping across the boundary jumps: England.days_in_month(1752, 9) #=> 19
England.valid_date?(1752, 9, 3) #=> false
Date.shift(~D[1752-09-02 England], day: 1) #=> ~D[1752-09-14 England]