Just dating: The stories behind 12 computer system reference dates

There are reasons - sometimes good reasons - that all of those seemingly random dates were chosen for epochs

Genesis 1:1 - The Beginning

Computer system epochs - reference dates from which operating systems, file systems and programming languages track the passage of time - span hundreds and even thousands of years. Some epoch choices seem obvious (January 1, 2001) while others (November 17, 1858?) not so much. Some aren’t even actual calendar dates (January 0, 1900). Some epochs are celebrated and others live in obscurity even to those who use the systems that depend on them. The one thing they all have in common, though, is that they were chosen for a reason. Here are a dozen computer system reference dates that have been used through the years and the stories behind their significance.

Microsoft. NET
January 1, 1

Reference date used by: .NET, Go

Significance: Midnight on January 1, 1 A.D. is the start of the Gregorian calendar, the international standard for calendars. It’s natural then, to use it as a reference point when measuring the passage of time. Microsoft’s .NET applications and the Go programming language do so by representing dates and times as “ticks” (100 nanoseconds) and nanoseconds, respectively, since this date and time. In Go, it’s common to check the validity of dates by seeing whether they evaluate to zero (the epoch), since it’s unlikely that date and time would come into play in practice.


IBM's z/OS
October 14, 1582

Reference date used by: z/OS

Significance: In 1582 Pope Gregory XIII ordered the creation of the Gregorian Calendar (see what he did there?) to allow more consistent scheduling of Easter. It replaced the Julian calendar, which was becoming increasingly out of sync with the vernal equinox. The new calendar was based on a design by the Italian astronomer Luigi Lilio (AKA Aloysius Lilius) and was first used starting on October 15, 1582 by Italy, France, Poland, Portugal and Spain. In 1986, IBM created Lilian dates, to measure the number of days since October 14, 1582 (10/15/1582 is Lilian date 1) and now IBM’s z/OS mainframe operating system uses this as its epoch.

Windows logo
January 1, 1601

Reference date used by: Microsoft Windows

Significance: The Gregorian Calendar runs on 400 year cycles; every year divisible by 4 is a leap year, except those that are divisible by 100 but not 400. The last year in a cycle is the year divisible by 400 (e.g., 2000). January 1, 1601 was, thus, the beginning of the Gregorian cycle in effect when Windows was designed, so it was a natural choice as a reference date and is used by Microsoft as the epoch for its Win32/Win64 APIs and NTFS file system.

Sybase soccer balls
January 1, 1753

Reference date used by: Sybase, pre-2005 Microsoft SQL Server

Significance: The Gregorian calendar was not adopted by the United Kingdom (including the American colonies) until 1752. Converting from the Julian to Gregorian calendars involved the loss of at least 10 days, to account for the drift of the Julian calendar from the vernal equinox. Therefore, calculation of U.K. or U.S. dates prior to this switch would be more complex. To avoid this headache, datetime columns in Sybase (and Microsoft’s SQL Server prior to 2005, which was based on Sybase) track dates beginning with January 1, 1753, the first full year that the Gregorian calendar was officially used in (just about all) of the Western world.

The MUMPS Programming Language
December 31, 1840

Reference date used by: MUMPS

Significance: The MUMPS programming language was first developed at Massachusetts General Hospital in the late 1960s. When designing functions to handle date and time, the developers wanted to be able to represent any potential birth date of any living person. At the time, James M. Poitras read that one of the oldest living U.S. citizens was a Civil War veteran who was 121 years old (unlikely, but still), meaning a reference date in the early 1840s was needed. Since, given time since an epoch, it was easiest to calculate the date if every fourth year was a leap year, 1841 was chosen as the first year, making midnight on December 31, 1840 as the epoch.

OpenVMS quilt
November 17, 1858

Reference date used by: OpenVMS

Significance: Astronomers have long measured the passage of time using Julian dates, defined by Joseph Scaliger in 1853 as the number of days that have passed since noon on January 1, 4713 BC. In 1957, the Smithsonian Astrophysical Union wanted to track Sputnik using a 36-bit IBM 704 computer. They needed 18 bits to store the time down to 100 nanoseconds. The day had to fit in the remaining 18 bits, so they tracked a Modified Julian Date, defined as the days since midnight of November 17, 1858 (Julian day 2,400,000.5). This was adopted as the epoch for VMS when it was developed in the mid-1970s.

Microsoft Excel
January 0, 1900

Reference date used by: Microsoft Excel

Significance: When was Microsoft Excel was first developed in the early 1980’s, it was meant to be compatible with other popular spreadsheet programs at the time, such as Lotus 1-2-3. The epoch for Lotus 1-2-3 was January 1, 1900. However, in an effort to save memory, Lotus engineers ignored the fact that 1900 was not a leap year. To be compatible, Excel also treats 1900 as a leap year, but they changed the epoch date to January 0, 1900 so dates from March 1, 1900 on onward would be calculated correctly. Excel was designed to alternatively use an epoch of January 1, 1904, to be compatible with Apple spreadsheets.

Mac OS 7.6
January 1, 1904

Reference date used by: Mac OS through version 9, LabVIEW

Significance: When choosing an epoch, early Apple developers opted for a reference date which made it as easy as possible to calculate the current date and time. The complicating factor in the date calculation was leap years. Normally, leap years are years divisible by 4 - except for those years also divisible by 100 but not 400. So, when choosing an epoch, Apple engineers went back as far as they could without including one of those exception years. Since 1900 is such an exception, they chose the first leap year after that, 1904. LabView, first created for Macs in 1986, shares this epoch.

Unix epoch party
January 1, 1970

Reference date used by: Unix (and Unix based systems like Mac OS X, Linux, Android), C, Java, JavaScript, Perl, PHP, Python, TCL

Significance: The granddaddy of all computer reference dates, the Unix epoch, was dictated by storage constraints. System time was originally tracked by counting every 1/60th of a second from the epoch, meaning that 32-bit date fields could only span a total of about 2.5 years. So, a very recent epoch date was needed in the early Unix days, and January 1, 1971 was chosen. More breathing room was gained when Unix began tracking system time only to the second, and the epoch was changed to January 1, 1970.

MS-DOS floppy disk
January 1, 1980

Reference date used by: DOS, OS/2, FAT16, FAT32

Significance: Unlike other systems such as Unix, DOS operating systems like MS-DOS and PC DOS only tracked the number of years from a reference date, and stored the remaining date/time components (month number, day number, hour, second). The 32-bit date/time field allocated seven bits for the year. Since this only allowed for a range of 128 years, when the first DOS OS, 86-DOS, was released it, naturally, started counting years from the year it was released, 1980. Since Microsoft and IBM helped to create them, OS/2, FAT/16 and FAT/32 adopted the DOS epoch.

Navstar satellite
January 6, 1980

Reference date used by: GPS satellites

Significance: The first Global Positioning System satellites launched in the late 1970s didn’t track dates, only time within the current week. Beginning with Navstar 8, launched in July 1983, GPS satellites began tracking and the week number as well. Week number is stored in a 10-bit field, meaning it could track just under 20 years worth of weeks (1024). When choosing a reference week to count from, a recent starting point, the first full week of 1980, beginning Sunday, January 6, was chosen. This week number rolled over on August 22, 1999, which is now the reference date - until it rolls over again on April 27, 2019.

Cocoa DevHouse
January 1, 2001

Reference date used by: Apple’s Cocoa API

Significance: While Apple’s OS X uses the epoch of its Unix ancestor, January 1, 1970, when choosing a reference date for its Cocoa API, they went with something more recent, January 1, 2001. Like January 1, 1601, 1/1/2001 is the start of a 400 year cycle in the Gregorian calendar, which is a nice choice for an epoch since it comes right after a year divisible by 100 which was a leap year. However, 2001 also corresponds to the year that OS X was first released, making it a logical choice for Apple all the way around.