I really like date and time. It’s not a simple subject. I remember when Tom Wozniak, an older gentleman who used to work for IBM, told me of his first class’ first assignment: Given a year, say “Leap Year” or “Not Leap Year”. If you believe this is a simple rule, that means you haven’t looked it up yet. Nor have you checked what we’ll do before the year 1582. Or 1752 if you’re part of the British Empire. The correct answer is, probably, “ask your teacher every picky little point until he or she gives up.”
Computer programmers in Java use a special object to hold dates and times. Last I checked, the date and time was 1424044140000. That was, at that time, the number of milliseconds since January 1, 1970, midnight GMT. Why that day? Why does the Prime Meridian go smack through the middle of the Royal Observatory in Greenwich? So we can get back to work, exactly.
But, while that holds dates, it doesn’t let us do much with them. So we have the Calendar. Now we can tell the computer, “set this to the second Thursday in December,” and the computer (dum-de-dum-dum) can do it. Well, actually, we say, “Start at December 1 (which is 11/1, because computer programmers start their months at 0), keep going forward a day until we hit Thursday, then go forward a week.”
But Java, and computers in general, have a real problem with vagueness. Metadata librarians, on the other hand, have a ton of vagueness to deal with, but can’t really work with milliseconds and months starting with 0. We need dates and times that can be searched and sorted by machines, but can be read by humans. Now, Dublin Core will let us type anything we want into its Date element, but if we want a bit more usefulness, we can use W3CDTF. So, right now, it’s
(random note: W3CDTF time zones diverge from UTC, not GMT).
I really like W3CDTF. Even if you don’t know about it, that date and time is still relatively readable (you might get confused on the day and the month, but it beats milliseconds!). Even more cool, if you take a bunch of dates and times in this format, and sort them in alphabetical order, it’s also chronological order. Well, after you undo the time zones, so that time above becomes:
2015-02-16T00:05:49Z (add 6 to undo the -6, 24:05 is 00:05 the next day).
But, as the LS566 text notes, this can’t handle ranges of dates or uncertainty of dates, at which point, we’re back to typing “1960-1972?” Because Dublin Core is simple, and you’ll like simple, in a couple of paragraphs.
MODS and TEI aren’t, though. Both will let you add a W3CDTF date, or any portion starting at the beginning, so if you only want to note the year and month (2015-02), you can. MODS will also let you set the date as the start or end of a range and note whether said date is approximate, inferred, or questionable.
TEI wants to handle any measure of time that can occur in human writing, so it lets you put in blanks for parts. For example, if you know it happened in January, but not what year, you’d write “–01”, where the first “-” stands for “unknown year”. It also has differing markers depending on whether the text refers to something taking a range of time to happen (“from” and “to”) or whether it refers to an instant that occurred somewhere in a range of time (“notBefore” and “notAfter”). It even lets you say what calendar the text is using: Julian, Persian, Stardate, etc.
However, in the examples of dates for TEI, there’s a line that reads
dates from <date when=”1300“>around 1300</date>
because it doesn’t have MODS’ ability to just say “approximate”. TEI wants to know how approximate something is, and this is just some wibbly-wobbly timey-wimey stuff around 1300. So, to get to the point, no, there isn’t even a perfect metadata schema for all times, much less anything else more complicated.