ImpossibleEmailDates
A friend of mine asked why he got an email from 1969. That got me thinking a bit and here's what I ended up writing back to him.
This would probably be a good question for a sysadmin job interview.
From philiph@pobox.com Thu Jan 15 16:21:47 2009 To: joe Subject: Re: ruminations Date: Thu, 15 Jan 2009 16:21:47 -0800 On Jan 15, 2009, at 3:14 PM, joe wrote: > p.s. check out the date below. Does that actually read "1969?" > --- On Wed, 12/31/69, <> wrote: > From: <> > Subject: > To: > Date: Wednesday, December 31, 1969, 4:00 PM Yes, and I will explain why (you may regret asking). Computer time has to start at some arbitrary date and count forward from that. In the unix world (the computers behind the scenes that handle most email) that date is 12:00AM January 1 1970 UTC: http://en.wikipedia.org/wiki/Unix_time the date on all unix machines is stored as the number of seconds since the start of time (called the epoch). So for example that number right now as I write is 1,232,064,272 seconds. That makes it easy to compare dates since you can just add and subtract seconds without worrying about minutes, hours, etc. Obviously you convert to human- readable time formats to actually display the time. So anyway the earliest time that can be represented on a unix computer is as I said 12:00AM January 1 1970 UTC. UTC used to be called Greenwich Mean Time and it's the time at longitude 0" running through the observatory in Greenwich, England. UTC/GMT is 8 hours ahead of Pacific standard time. So a bogus message got generated somehow and sent to you (could just be some random corruption in your inbox). The computers along the way didn't have a time to go along with the message so they assigned a value of 0. That's 0 seconds since the epoch and remember that UTC is 8 hrs ahead of PST. Thus the date was ultimately shown to you as 4:00pm December 31 1969, 8 hours behind UTC because you are in PST. Now to take this a step further, traditional unix time is stored in a signed 32-bit integer. That means the largest time that can be represented is 12:00AM UTC 1970 + 2,147,483,647 seconds, which is 3:14:07AM UTC on January 19 2038. That's sort of the next step after the y2k problem. Hopefully by then we will have converted all computers to use 64-bit time, which pushes the largest possible day millions of years in the future. However there will probably be at least a few old computers running then which will fail: http://en.wikipedia.org/wiki/Year_2038_problem So I am planning on having a party on January 18, 2038 to celebrate the end of time. I'll be 66 then. I hope you will be able to attend. P.