Skip to main content
UtilitiesFree · no sign-up

Unix Timestamp Converter

Epoch seconds to a readable date and back, in UTC and in your own time zone.

Updated

Which way?

Seconds or milliseconds since 1970-01-01T00:00:00Z. A minus sign is allowed and means an instant before that.

That instant is

2026-01-01T00:00:00.000Z

Thursday, in ISO 8601 extended format

UTC
Thu, 01 Jan 2026, 00:00:00 GMT+0
Your time zone
Reading your browser clock
Day of week (UTC)
Thursday
ISO 8601
2026-01-01T00:00:00.000Z
Epoch seconds
1767225600

Read as seconds, because the number is small enough that nothing else is plausible. Force the other reading with the selector if that guess is wrong for your data.

In short

What does a Unix timestamp actually count?

Seconds elapsed since 1970-01-01T00:00:00Z, with no time zone attached to the number itself. Timestamp 0 is that instant, a Thursday. 1000000000 is 2001-09-09T01:46:40Z and 1767225600 is 2026-01-01T00:00:00Z. A 13-digit number is almost always milliseconds — a factor of 1000, and 55 thousand years of error if misread.

Unix time deliberately ignores leap seconds, so it is a count of calendar seconds rather than a true tally of elapsed SI seconds since 1970.

How to use the unix timestamp converter

Paste a timestamp and the panel gives you the same instant four ways at once: the ISO 8601 string, the UTC calendar reading, the same moment in your own browser time zone, and the day of the week. The conversion runs in the page, so nothing you paste is uploaded anywhere.

The first thing the tool tells you is which unit it assumed. That matters more than it sounds. A count of seconds and a count of milliseconds look identical apart from length, and getting it backwards moves the answer by a factor of 1000, which at 2026 scale is the difference between next January and the year 57971.

The second thing worth reading is the pair of zone rows. A Unix timestamp has no zone in it, which is exactly why it is a good storage format and a bad display format. The number is the same everywhere on earth, and the calendar reading of it is not.

0

The epoch

1970-01-01T00:00:00Z, a Thursday

2147483647

The 32-bit ceiling

2038-01-19T03:14:07Z

4294967295

Unsigned 32-bit

2106-02-07T06:28:15Z

Going the other way, the direction switch turns a calendar date into epoch seconds, and it asks you whether the clock you typed is UTC or your own local time. That question is not pedantry. It is the single most common source of an off-by-one-day bug in a date range query.

Negative timestamps work too. They count backwards from 1970, so -1 is 1969-12-31T23:59:59Z. They are perfectly legal, but a fair number of libraries and database drivers reject or mangle them, so check your storage layer before you rely on one for a historical date.

Do

  • Store instants as UTC epoch seconds and convert to a zone only when displaying them.
  • Quote the ISO 8601 string in bug reports so the reader never guesses your offset.
  • Say seconds or milliseconds explicitly in any API field name or column comment.
  • Test date handling with an instant past 2038-01-19 before you ship it.
  • Treat a 13-digit number as milliseconds until something proves otherwise.

Don't

  • Assume a timestamp column is seconds because the last one you saw was.
  • Use Unix time to measure a duration that has to survive a leap second.
  • Build a date range bound from a local wall clock without recording the offset.
  • Store a formatted local date string where the instant itself is what matters.
  • Round a millisecond timestamp by chopping three digits off the end of the string.

Timestamps worth recognising on sight, each one converted by the same engine this page runs on.

Timestamp (seconds)UTC instantDayWhy it matters
-11969-12-31T23:59:59ZWednesdayOne second before the epoch, and legal
01970-01-01T00:00:00ZThursdayThe epoch itself, defined by POSIX
10000000002001-09-09T01:46:40ZSundayThe first billion, widely celebrated
17672256002026-01-01T00:00:00ZThursdayA recent round calendar boundary
21474836472038-01-19T03:14:07ZTuesdayThe signed 32-bit ceiling
21474836482038-01-19T03:14:08ZTuesdayWhere a 32-bit counter wraps negative
42949672952106-02-07T06:28:15ZSundayThe unsigned 32-bit ceiling
Every instant here is UTC, in ISO 8601 extended format. Paste any of the numbers in the first column into the tool above to reproduce the row exactly.

What actually breaks on 19 January 2038?

A signed 32-bit integer holds values up to 2 to the power of 31 minus 1, which is 2147483647. Read as seconds since the epoch, that lands on 2038-01-19T03:14:07Z, a Tuesday. One second later the counter has nowhere to go and wraps to the most negative value it can hold, which reads as December 1901.

This is not a hypothetical for later. Any system that computes a date in the future crosses the line long before the date itself arrives. A thirty year mortgage schedule, a certificate expiry, or a retention policy measured in decades all hit it today, which is why the failures started surfacing years ago rather than waiting for 2038.

Where the ceilings sit
Signed 32-bit, the classic time_t
2038-01-19T03:14:07Z
Unsigned 32-bit, seconds
2106-02-07T06:28:15Z
Signed 32-bit, milliseconds
about 25 days after the epoch
64-bit signed, seconds
about 292 billion years

Moving to a 64-bit time_t retires the problem entirely, which is why every current mainstream platform has already done it.

The fix is simply a wider integer, and most of the work is done. Linux, the BSDs, macOS and modern Windows all use a 64-bit time value on 64-bit builds. What is left is the long tail: embedded firmware, older 32-bit builds, file formats with a fixed 32-bit field, and database columns typed as a four-byte integer years ago.

The practical test is cheap. Set a date past 2038-01-19 in a staging environment and see what your stack does with it. If a value comes back in 1901, or a query silently returns nothing, you have found a 32-bit field, and you have found it while there is still time to widen it.

Counting the days between two dates

Once you have converted a timestamp to a calendar date, the next question is usually how far it sits from another one. The date difference calculator answers that in days, weeks and months.

Open the date difference calculator

Why Unix time is not a true count of elapsed seconds

Unix time is defined so that every day contains exactly 86400 seconds. That is a modelling choice, not a measurement, and it is written into the standard: POSIX defines seconds since the epoch by a formula built from the calendar date, with no term for leap seconds anywhere in it.

Coordinated Universal Time is kept within 0.9 seconds of the earth rotation angle by the insertion of leap seconds, announced in advance by the IERS.
International Earth Rotation and Reference Systems Service, Bulletin C, the standing announcement of leap seconds

Earth rotation is not that tidy, so UTC inserts a leap second when the gap grows too large. Twenty seven of them have been added since 1972, and the offset between International Atomic Time and UTC has stood at 37 seconds since the start of 2017. Atomic time counts every one of those seconds. Unix time counts none of them.

The consequence is concrete. A Unix timestamp during a leap second is ambiguous, because the same number has to serve two different real instants, and most systems handle it by repeating or smearing a second rather than by numbering it. Subtracting two timestamps across a leap second therefore gives you a duration that is off by one second per leap second in between.

It is also worth knowing the direction of travel. In 2022 the General Conference on Weights and Measures resolved to stop inserting leap seconds by 2035, which would let UTC drift further from earth rotation and remove the ambiguity that Unix time has been quietly papering over for fifty years.

The formula, worked line by line

There is no arithmetic worth the name here, which is precisely the appeal of the format. A Unix timestamp is a single integer, and every calendar reading of it is a rendering step rather than a calculation. That is why it sorts correctly as a number, compares with a single operator, and survives being written to any storage that holds integers.

The only two decisions the tool makes are which unit your number is in, and which time zone to render the answer in. Both are stated on screen rather than assumed silently, because both are places where a converter can be confidently wrong.

milliseconds = seconds x 1000
instant = 1970-01-01T00:00:00Z + timestamp seconds
auto-detect: abs(value) >= 100000000000 reads as milliseconds, otherwise seconds
signed 32-bit ceiling = 2^31 - 1 = 2147483647 seconds
unsigned 32-bit ceiling = 2^32 - 1 = 4294967295 seconds
Unix time from the 1970 epoch to the 2038 overflowUnix time counts seconds from 1970-01-01T00:00:00.000Z, a Thursday. A signed 32-bit counter runs out 2,147,483,647 seconds later at 2038-01-19T03:14:07.000Z, the Tuesday known as the Year 2038 problem, after which the count wraps to a large negative number. The timestamp 1767225600 sits at 2026-01-01T00:00:00.000Z.SECONDS SINCE 1970-01-01T00:00:00Z1970the epoch2001one billion2026this page203832-bit limitpast the last tick a signed 32-bit count wraps to a negative numberTHE TWO ANCHORSepoch1970-01-01day of weekThursdayoverflows2038-01-19limit2,147,483,647
One axis from the 1970 epoch to the 2038 ceiling, with the second the signed 32-bit counter runs out.
One number, read both ways
The input
1767225600000
Read as milliseconds
2026-01-01T00:00:00Z
Read as seconds
+057971-02-25T00:00:00Z
The threshold
100000000000
What the tool assumes
milliseconds

The seconds reading is so far out that ISO 8601 needs its expanded year form to write it at all, which is the clearest possible sign the guess went the wrong way.

The zone question is the other half. ECMA-262 says a date and time string with no offset is read as local time, while a date on its own is read as UTC. That single rule is why new Date("2026-03-01") and new Date("2026-03-01T00:00") can be different instants in the same program.

This tool refuses to leave that implicit. When you convert a calendar date into a timestamp, you pick whether the clock you typed means UTC or your own wall time, and the answer moves by your offset accordingly. For anyone in London in July that is one hour, and for anyone in Auckland it is thirteen.

One last practical note on precision. Milliseconds are enough for logs and user-facing timing, but they are not enough for high-rate tracing, which is why microsecond and nanosecond epoch counts also exist. A 19-digit number is nanoseconds, and dividing it by a billion rather than a thousand is the fix.

Questions people ask

Sources

Where the constants and formulas on this page come from. Each line names the figure it backs.

  1. Seconds since the Epoch are defined by a formula in which every day counts exactly 86,400 seconds, which is why leap seconds never enter the number.

    The Open Group Base Specifications Issue 8, section 4.19 — Seconds Since the EpochThe Open Group / IEEE, IEEE Std 1003.1-2024

  2. The trailing Z in the timestamp this tool copies denotes a UTC offset of exactly 00:00.

    RFC 3339: Date and Time on the Internet: TimestampsIETF, 2002

  3. The decision to stop inserting leap seconds, by raising the permitted UT1 minus UTC difference in or before 2035.

    Resolution 4 of the 27th CGPM — On the use and future development of UTCBIPM, 2022