
Unix Timestamps: Convert Epochs and Avoid Time Zone Mistakes
Convert a Unix epoch to a readable date and back, tell seconds from milliseconds, and avoid time zone, JWT and clock change traps, all in your browser.
An epoch is a count of seconds with no time zone
A number such as 1710000000 or 1710000000000 turns up in a log line, an API response, a JWT or a database column. It counts the time elapsed since 1 January 1970 at 00:00:00 UTC, counted as seconds or as milliseconds. It carries no time zone. The Unix timestamp converter turns an epoch into a date and a date into an epoch. Empty fields follow a live clock. Type an epoch, an ISO date or a local date and time, and the other two fields update. A table gives the epoch as seconds and as milliseconds, then ISO 8601, RFC 2822, an SQL datetime, a text in your language and a relative time. It shows them in UTC or in your browser's time zone. The conversion happens in your tab and nothing is sent. This guide reads an epoch digit by digit, then shows what a time zone changes and what it leaves alone. It covers the mistakes that cost the most: seconds read as milliseconds, a JWT that never expires, a date written without a zone and a clock change. It also gives the limits of 2038 and of other epochs, and the same conversions in JavaScript, Python, a shell and Java. Related tools are listed in the developer utilities hub.
What the converter is for, and where it stops
The converter answers two questions: which moment does this number name, and which number names this moment?
The converter reads one value at a time. The rest of the chain is checked somewhere else.
Reading a value without mistakes
In Auto mode the tool counts the digits of the whole part, ignoring the sign. The examples below can be pasted into the Unix epoch field.
The Unix epoch field accepts digits, an optional minus sign and a decimal point.
Take 1710000000. The epoch does not change, only its reading does. Switch Timezone to Local to see the line for your own zone.
Type a date in the ISO / date text field to get its epoch. The result depends on what you wrote after the time. The values below were checked in Node 26, which uses the same JavaScript engine as Chrome. Other browsers may read the non-ISO forms differently.
Five mistakes you only see in production
JavaScript counts in milliseconds, most other languages and protocols count seconds. new Date(1710000000) gives 20 January 1970 at 19:00:00 UTC. In Python 3.14, datetime.fromtimestamp(1710000000000, tz=timezone.utc) stops with "year must be in 1..9999, not 56157". Java has two methods, Instant.ofEpochSecond and Instant.ofEpochMilli, and nothing warns you if you pick the wrong one.
RFC 7519 defines exp, nbf and iat as seconds since the epoch, with leap seconds ignored. A token signed with exp set to Date.now() + 3600000 carries milliseconds. With the jose library, version 6, such a token signed on 9 March 2024 still verified when the check date was set to 2034. Its exp of 1710003600000, read as seconds, is +056157-11-09T08:00:00.000Z. The converter hides the bug if you leave Unit on Auto, because it reads 13 digits as milliseconds and shows a normal date.
A date text without an offset names no moment until a zone is chosen. Python's datetime(2024, 3, 9, 16, 0, 0).timestamp() on a machine set to Paris gives 1709996400, not 1710000000. JavaScript reads 2024-03-09 as midnight UTC but 2024-03-09T00:00:00 as midnight local time, so two spellings of the same day differ by the offset of the machine.
Europe goes back to winter time on Sunday 25 October 2026, at 01:00 UTC. In Paris, 03:00 becomes 02:00, so 02:30 happens twice: at 00:30 UTC (1792888200) and at 01:30 UTC (1792891800). With the browser set to Paris, the Local date/time field takes the first one. On 29 March 2026 the hour from 02:00 to 03:00 does not exist, and the field answers that it cannot parse 02:30. The epoch removes the doubt, because it names one moment.
An epoch is easy to store and easy to overflow. The limits below come from the width of the type that holds it.
Units, limits and other epochs at a glance
Check the documentation of the system that produced the number before you trust its digits.
You will spot these values quickly once you have seen them, and every one can be pasted into the converter.
Some systems count from another origin or in another unit. If a date comes out decades off, look for one of these.
The Unix timestamp converter, step by step
The Unix timestamp converter updates a short moment after you stop typing. There is no Convert button.
Look at the live clock
The block "Current Unix time" shows the epoch as Seconds and as Milliseconds, each with a Copy button. Pause stops the clock and Resume restarts it. Copy ISO (UTC) takes the current date.
Type or paste the epoch
Use the Unix epoch field. A badge such as "Inferred: seconds" shows how the digits were read. You can force Seconds or Milliseconds with the Unit option.
Read the Formats table
It lists the epoch as seconds and as milliseconds, ISO 8601, RFC 2822 and an SQL datetime. It adds a locale string in the language of the page and a relative time. RFC 2822 uses English day and month names. The relative row counts a month as 30 days and a year as 365, so it is a rough guide.
Copy the row you need
Each row has its own Copy button. A short message confirms what was copied.
The three fields stay in sync. The one you edit decides the others.
ISO / date text
Type 2024-03-09T16:00:00Z to get the epoch. The Unix epoch field fills with seconds, or with milliseconds if Unit is set to Milliseconds.
Local date/time
Use this field to enter a date on your own wall clock. It is never UTC, even when the table shows UTC, and a hint below the field says so.
Check the zone you meant
If the ISO text has no Z or offset, the browser applies its own zone. Add the offset when you want the result to be the same on every machine.
Two settings change how the page reads and shows a value.
Unit
Auto reads up to 10 digits as seconds and 11 to 15 digits as milliseconds. Seconds and Milliseconds force the reading. Use Seconds for the claims of a JWT.
Timezone
UTC is the default. Local uses the zone of your browser and changes the ISO, RFC 2822, SQL and locale rows. The epoch rows never change.
Load sample and Clear all
Load sample enters 1710000000. Clear all empties the fields and brings back the live clock.
When a value cannot be read, the tool says why and shows no date.
Could not parse this input
The text is neither a number nor a date that the browser understands. Rewrite the date as ISO 8601, for example 2024-03-09T16:00:00+00:00.
This value looks more precise than milliseconds
The number has 16 digits or more, as microseconds, nanoseconds or a FILETIME do. Remove the extra digits first.
The same conversions in JavaScript, Python, a shell and Java
JavaScript works in milliseconds. Multiply or divide by 1000 at the boundary with systems that use seconds, and give a zone to Intl.DateTimeFormat when you need a named one.
Basic example
Pass a time zone to every call. A naive datetime has none, and timestamp() then uses the zone of the machine.
Basic example
GNU date, found on Linux, and the BSD date of macOS do not take the same options.
Basic example
The java.time API keeps the unit in the method name, which makes a mix-up visible in a code review.
Basic example
Conclusion
An epoch names one moment, and almost every error comes from how it is read. Count the digits to tell seconds from milliseconds, write the offset on every date, and keep the zone for display. The Unix timestamp converter shows the same moment in the formats you need, in UTC or in your own zone. It reads one value at a time, offers no list of zones and rejects values of 16 digits or more. For a token, read its claims with the JWT decoder and paste exp with Unit set to Seconds. For a log, rewrite the date as ISO 8601 first. The developer utilities hub lists the related tools.
Convert a Unix timestamp in your browser
Related Articles

Read a cron expression field by field, check its next runs in UTC or local time and avoid traps with steps, time zones and dialects, all in your browser.

Compute network, mask, host range and broadcast of a CIDR, summarize ranges into minimal blocks and check an IP, all in your browser. Nothing is uploaded.

Format a Copy as cURL, parse a raw HTTP request or response and read a HAR export in your browser: nothing is sent, nothing is replayed.