About 10 years ago, I embarked on a project to parse the contents of the hulking XML file
that iTunes creates to hold all the metadata about the music I listen to.
There's a ton of interesting info buried in there about my listening
habits. Interesting to me, at any rate.
For instance, I created a script that lists all the music I've listened
to for the past month. The little program is almost automatic--I just have
to load the updated XML
file to the server once a month. Now
I have 15 years of this nearly useless
information. Want to know what I was jamming August 25, 2007, driving out I-80 west to
Burning Man? The answer's in there somewhere.
And this project is where I learned how to decode the nine-digit "Play Date" tag, and
how the format follows a tradition that goes all the way back to the birth of the
Apple Macintosh itself.
The "XML Music Library.xml" file, which resides on the computer you dock your iPhone to, offers
two tags that capture at what time a mp3 track was played, "Play Date," and "Play Date UTC."
"Play Date UTC" is in human-parsable form (UTC stands for,
somewhat counter intuitively, Coordinated Universal Time).
"Play Date," on the other hand, is a nine-digit integer.
I was curious as to if I could calculate the time played directly from
"Play Date" tag, rather than parse the "Play Date UTC" tag apart.
I suspected that iTunes stored this number for exactly such purposes, in fact.
The challenge was to decipher the number. A "Play Date" value of "3365245919" should
equal "2010-08-21T18:31:59," to use the example above. I would just need to find the conversion algorithm.
My first guess was that it was a Unix Timestamp,
given that iTunes, in its original Macintosh incarnation,
ran on Unix. The Unix Timestamp counts time in
terms of seconds elapsed since January 1, 1970.
When I put the number "3365245919" into a Unix Timestamp calculator,
I didn't get August 21, 2010 at all, but rather Aug 21, 2076!! Crazy!
My next guess was to inspect the "Play Date"
number a bit. By comparing a few "Play Date" and "Play Date UTC" entries,
I confirmed that the incrementation was, in fact, in seconds: One song played at 3:10 has
the "Play Date" of "3365248245" while the next song,
played at 3:13, had a "Play Date" of "3365248408," which was greater by 163--
or just under three minutes if you consider a second for each increment.
So, August 21, 2010, 6:31.59 was 3,365,245,919 seconds ahead of what date?
A quick consult with the
online Epoch Converter, 3,365,245,919 seconds equals
38,949 days (and 14 hours and 31 minutes).
Punch this number into the
ole online date calculator
(the Internet remains undefeated!), we find that subtracting 38,949 days from August 21, 2010
brings us to January 1, 1904.
So, in short, the iTunes "Play Date" figure is the number of seconds that have elapsed since January 1, 1904.
In other words, Apple is using an Epoch time, a time series with an arbitrary start point.
In this case, the developers of iTunes decided on January 1, 1904.
And this is keeping with an Apple tradition.
This date is the official starting point for all Macintosh computer timestamps.
Apple chose January 1, 1904, because it was the last century's first leap year--
which would make it an easy starting point for developers. (as to why 1900
wasn't a leap year, check this article here).
So everything is cool, at least until 2040, when Apple's Epoch time runs out of digits and turns over.
Will you be ready?
<key>Play Date</key><integer>3365245919</integer>
<key>Play Date UTC</key><date>2010-08-21T18:31:59Z</date>