The holiday framework was never polished. Currently it can't handle holidays
that span more than one day, and the data is largely hardwired into code rather
than factored into resources. Iterating through holidays is also difficult.
The following note from Mark also indicates some missing features:
"I've looked over the holiday framework in the past, and I can't say as I like
it very much. First, there is not much documentation of how it is supposed to
work. I don't see how it handles observed holidays (where it goes to Friday if
it would fall on a Saturday, and Monday if it would fall on a Sunday). And if it
is data driven (which I don't see), then it is not clear how it works."
1. data driven: and by that, I don't mean ListResourceBundle (e.g. code), I mean
just a table o' flat data
2. separate the localizable names of holidays from their programmatic
determination so that the latter can be shared.
1. determine whether a given day is* a holiday
2. for all holidays, have the option to determine what 'kind' of holiday it is:
formal or observed (or both); city, state/provincial, national, bank, school,
3. allow for historical changes, e.g. in ca.1939 Thanksgiving changed from the
last Thursday in december to the 4th, to allow a longer Xmas shopping season.
4. iterate between two Dates, for all holidays of a given kind (or of all kinds,
or of a specific holiday (e.g. Thanksgiving)), finding all the holidays between
them with the first/next/previous/last occurrence. (#1 is really a special case
5. where a holiday doesn't start on day boundaries, be able to determine what
the start/end times are. If a holiday spans multiple days, be able to determine
that. (The is* above really means 'overlaps with')
In building the above, we should look carefully at the general issue of
recurring dates, e.g. calendar entries, to see whether the generalization is
useful enough to build into the framework, instead of special-casing just for
holidays. We should also build a web-demo of the above, as a test bed for
determining whether there are additional functions that need to be provided."