Developer tools · Unix timestamp converter
Why Unix time starts on 1 January 1970: a short history of the epoch
· Background
timestamps unix-time data-formats
Nothing happened on 1 January 1970; the date was chosen for convenience after Unix's original clock threatened to overflow. This post tells the story of the early Unix clock, the switch to seconds, and how the convention spread everywhere.
A date nobody celebrates — why 1970 keeps appearing in bugs, defaults and dashboards half a century later
January 1970 appears whenever software mistakes a small duration or seconds count for milliseconds. It is not a fallback birthday generated by ToolAcre; it is the zero point from which the input was interpreted. The test for epoch zero returns `1970-01-01T00:00:00.000Z` and Thursday.
Seeing that date is therefore diagnostic. A value near zero, a missing field coerced to zero or a scale mismatch can all land nearby. Capture the raw value before blaming formatting. The calendar output is revealing the arithmetic it received.
ToolAcre’s notable-epoch table gives zero a deliberate label, reinforcing that 1970 is a defined reference rather than an error page chosen by the browser.
Unix's first clock — counting sixtieths of a second from the start of 1971 and running out of 32-bit room in under three years
The workbook supplied a detailed account of an early clock counting sixtieths from 1971. None of the required repository sources documents that history. Repeating it from memory would violate the authoring contract even if an external history might later support it.
What can be demonstrated is the current axis: zero at the epoch, positive seconds after it and negative seconds before it. That mechanism is sufficient for using the converter and diagnosing software. A future historical article should add reviewed primary or scholarly sources rather than treating code as evidence of design meetings.
The repository does not source Unix’s first clock design, so no historical reconstruction is asserted
ToolAcre names its input Unix timestamp and defines it in error guidance as seconds or milliseconds since 1970-01-01 UTC. The source does not explain why that year was selected, whether roundness mattered or which horizon designers wanted. Those motives remain omitted.
Arithmetic does explain the enduring utility of a fixed origin: subtraction yields elapsed distance, comparison orders instants, and a sign indicates which side of zero a value lies. The choice of zero is conventional; consistency among producers and consumers is what makes the numbers interoperable.
This distinction keeps convention and consequence separate. Software can depend confidently on the consequence while historians continue to evaluate evidence about the convention’s origin.
The implemented definition uses 1970; motives for choosing it require historical sources not present here
The tests model every day as the POSIX conversion does and explicitly jump from `2016-12-31T23:59:59Z` to `2017-01-01T00:00:00Z`. That is executable evidence for this tool’s behavior. It is not a citation for the wording or full scope of any external standard.
Keep standards claims distinct from implementation tests. A test proves what a release does under its fixtures; a standards document defines what conforming systems should do. Here the practical contract is clear enough to predict output without inventing formalization history.
The test also prevents a future refactor from quietly inserting a special leap label into output. Observable compatibility is guarded without overstating why the convention exists.
ToolAcre tests the POSIX-style model but does not serve as a standards citation
JavaScript Date represents its epoch count in milliseconds, while ToolAcre accepts Unix seconds and converts them by multiplying by 1,000. The route also returns both forms. That boundary explains why web applications frequently expose the same instant with three extra decimal zeros.
The repository cannot establish the chronology by which databases, C libraries and other ecosystems adopted epoch representations. Rather than narrating an unsourced spread, it shows a current interoperability seam and labels the unit used. That is actionable evidence for developers working today.
That restraint avoids a familiar content failure: a sequence of plausible milestones repeated without citations until later readers mistake accumulated repetition for documentary evidence.
Repository evidence shows JavaScript’s millisecond representation, not the full spread history
A fixed epoch carries no local zone. ToolAcre formats the resulting Date in UTC and separately in the browser’s local zone. Negative values extend before zero, as the −1 test demonstrates. Those consequences follow directly from a numeric axis and formatting layer.
The implementation also has a Date range of ±8.64×10¹⁵ milliseconds. That is a limit of the chosen representation, not a limit inherent in the abstract idea of an epoch. Always identify whose range and unit are being discussed before generalizing from a converter result.
The local formatter may apply a date before or after the UTC boundary depending on offset. That does not move zero; it changes only the human calendar projection.
What this does not cover — other systems' epochs, such as 1900, 1601 and 1980, which have their own histories
Other systems can choose another zero and another scale, which is why a large integer may remain nonsensical under both ToolAcre units. This article does not recount the histories of 1900, 1601 or 1980 origins. Article 340 instead focuses on recognizing that mismatch and deriving conversions from documented definitions.
When the origin is unknown, compare against source documentation rather than repeatedly shifting zeros. A Unix converter intentionally assumes 1970; it cannot auto-identify a foreign epoch from one number. Keeping origin alongside unit prevents an arithmetic success from becoming a semantic mistake.
Other epoch origins are compared separately without claiming their histories here
The reliable lesson is mechanical: Unix zero maps to the start of 1970 UTC, signs extend around it, and seconds become JavaScript milliseconds before Date formatting. ToolAcre makes each of those facts observable with values 0, −1 and the notable-epoch table.
The reasons people selected that convention belong to sourced history, not inference from modern code. Respecting that boundary produces a shorter but truer account. Use the converter for arithmetic; use appropriate historical material before attributing motives or milestones.
Evidence discipline is part of technical accuracy. A precise omission tells maintainers exactly what new sourcing is required before the historical account can responsibly expand.