In computing, an epoch is a date and time from which a computer measures
system time. Most computer systems determine time as a number representing the seconds removed from particular arbitrary date and time. For instance,
Unix and
POSIX measure time as the number of seconds that have passed since Thursday 1 January 1970 00:00:00
UT, a point in time known as the
Unix epoch.
Windows NT systems, up to and including
Windows 11 and
Windows Server 2022, measure time as the number of 100-nanosecond intervals that have passed since 1 January 1601 00:00:00 UTC, making that point in time the epoch for those systems.
Computing epochs are nearly always specified as midnight
Universal Time on some particular date.
Variation in detail
Software timekeeping systems vary widely in the precision of time measurement (granularity); some systems may use time units as large as a day, while others may use
nanoseconds. For example, for an epoch date of midnight UTC (00:00) on 1 January 1900, and a time unit of a second, the time of the midnight (24:00) between 1 January 1900 and 2 January 1900 is represented by the number 86400, the number of seconds in one day. When times prior to the epoch need to be represented, it is common to use the same system, but with negative numbers.
Such representation of time is mainly for internal use. On systems where date and time are important in the human sense, software will nearly always convert this internal number into a date and time representing a human calendar.
Problems with epoch-based computer time representation
Computers do not generally store arbitrarily large numbers. Instead, each number stored by a computer is allotted a fixed amount of space. Therefore, when the number of time units that have elapsed since a system's epoch exceeds the largest number that can fit in the space allotted to the time representation, the time representation
overflows, and problems can occur. While a system's behavior after overflow occurs is not necessarily predictable, in most systems the number representing the time will reset to zero, and the computer system will think that the current time is the epoch time again.
Most famously, older systems which counted time as the number of years elapsed since the epoch of 1 January 1900 and which only allotted enough space to store the numbers 0 through 99, experienced the
Year 2000 problem. These systems (if not corrected beforehand) would interpret the date 1 January 2000 as 1 January 1900, leading to unpredictable errors at the beginning of the year 2000.
Even systems which allocate more storage to the time representation are not immune from this kind of error. Many
Unix-like operating systems which keep time as seconds elapsed from the epoch date of 1 January 1970, and allot timekeeping enough storage to store numbers as large as will experience an overflow problem on 19 January 2038 if not fixed beforehand. This is known as the
Year 2038 problem. A correction involving doubling the storage allocated to timekeeping on these systems will allow them to represent dates more than 290 billion years into the future.
Other more subtle timekeeping problems exist in computing, such as accounting for
leap seconds, which are not observed with any predictability or regularity. Additionally, applications which need to represent historical dates and times (for example, representing a date prior to the switch from the
Julian calendar to the
Gregorian calendar
The Gregorian calendar is the calendar used in most parts of the world. It was introduced in October 1582 by Pope Gregory XIII as a modification of, and replacement for, the Julian calendar. The principal change was to space leap years di ...
) must use specialized timekeeping
libraries.
Finally, some software must maintain compatibility with older software that does not keep time in strict accordance with traditional timekeeping systems. For example,
Microsoft Excel observes the fictional date of
29 February 1900
The leap year problem (also known as the leap year bug or the leap day bug) is a problem for both digital (computer-related) and non-digital documentation and data storage situations which results from errors in the calculation of which years are ...
in order to maintain
bug compatibility with older versions of
Lotus 1-2-3.
Lotus 1-2-3 observed the date due to an error; by the time the error was discovered, it was too late to fix it—"a change now would disrupt formulas which were written to accommodate this anomaly".
Epoch in satellite-based time systems
There are at least six
satellite navigation systems, all of which function by transmitting
time signals. Of the only two satellite systems with global coverage,
GPS
The Global Positioning System (GPS), originally Navstar GPS, is a Radionavigation-satellite service, satellite-based radionavigation system owned by the United States government and operated by the United States Space Force. It is one of t ...
calculates its time signal from an epoch, whereas
GLONASS calculates time as an offset from
UTC, with the UTC input adjusted for
leap seconds. Of the only two other systems aiming for global coverage,
Galileo
Galileo di Vincenzo Bonaiuti de' Galilei (15 February 1564 – 8 January 1642) was an Italian astronomer, physicist and engineer, sometimes described as a polymath. Commonly referred to as Galileo, his name was pronounced (, ). He ...
calculates from an epoch and
Beidou calculates from UTC without adjustment for leap seconds.
GPS also transmits the offset between UTC time and GPS time, and must update this offset every time there is a
leap second, requiring GPS receiving devices to handle the update correctly. In contrast, leap seconds are transparent to GLONASS users.
The complexities of calculating UTC from an epoch are explained by the
European Space Agency
, owners =
, headquarters = Paris, Île-de-France, France
, coordinates =
, spaceport = Guiana Space Centre
, seal = File:ESA emblem seal.png
, seal_size = 130px
, image = Views in the Main Control Room (1205 ...
in Galileo documentation under "Equations to correct system timescale to reference timescale".
Notable epoch dates in computing
The following table lists epoch dates used by popular software and other computer-related systems. The time in these systems is stored as the quantity of a particular time unit (days, seconds, nanoseconds, etc.) that has elapsed since a stated time (usually midnight UTC at the beginning of the given date).
See also
*
System time
*
Unix time
Notes
References
External links
Critical and Significant Dates(J. R. Stockton), an extensive list of dates that are problematic for various operating systems and computing devices.
Potential problem dates for computers (pdf)A list of potential problem dates for computers and software from 2001 to 2100 (IET).
{{Year-related problems
Calendaring standards