Skip to content
FormatKit

Free online epoch time converter

Epoch converter that works out the unit

Paste an epoch value and this converter reads its magnitude to decide whether you handed it seconds, milliseconds, microseconds or nanoseconds, then prints the moment in UTC and in a second time zone at the same time, with the relative form underneath. It is free, there is no account, and it runs the other way too: a calendar date becomes an epoch value in all four units, and a pasted column of up to 500 timestamps becomes a table. Every figure is computed with BigInt, so a 19-digit nanosecond value comes back with all 19 digits intact.

  • 100% free
  • No signup
  • 4 units auto-detected
  • Every IANA zone
  • 500 rows per paste

10 digits · read as seconds

seconds1234567890s
milliseconds1234567890000ms
microseconds1234567890000000µs
nanoseconds1234567890000000000ns

UTCUTC+00:00

2009-02-13T23:31:30Z

Friday, 13 February 2009 at 23:31:30

Day 44 of 365 · ISO week 7 of 2009 · Q1

The offset never moves here, which is why servers and logs should store this form.

America/New_YorkUTC-05:00

2009-02-13T18:31:30-05:00

Friday, 13 February 2009 at 18:31:30

Day 44 of 365 · ISO week 7 of 2009 · Q1

Any of the 56 identifiers in the selector above.

The other direction: a calendar date back to an epoch value

read in America/New_York

seconds1234585890s
milliseconds1234585890000ms
microseconds1234585890000000µs
nanoseconds1234585890000000000ns

2009-02-14T04:31:30Z in UTC, written with the UTC-05:00 that America/New_York was keeping on that date.

Count the digits, name the unit

Nothing in an epoch value records what it is counting, so the length of the number has to stand in for the missing label. These four bands are what the converter applies, and they stay unambiguous until the year 5138, where all three boundaries happen to meet.

DigitsUnitExampleMoment it names
1 – 11Seconds123456789013 February 2009, 23:31:30 UTC
12 – 14Milliseconds170000000012314 November 2023, 22:13:20.123 UTC
15 – 17Microseconds17487360000000001 June 2025, 00:00:00 UTC
18 or moreNanoseconds17862768001234567899 August 2026, 12:00:00.123456789 UTC

How to convert an epoch value

Paste it, confirm the unit, read both zones — and go back the other way in the panel below.

  1. Drop the number in

    Type the value into the epoch field, or copy it with no input focused and it arrives there by itself. Commas, apostrophes and underscores are stripped first, so 1,234,567,890 out of a spreadsheet and 1_234_567_890 out of a Rust literal both land intact. A decimal point is kept as extra precision rather than discarded: 1234567890.75 is a second and three quarters past the whole second.

  2. Check the unit it chose, or overrule it

    The line under the field reports the digit count and the unit that follows from it — eleven digits or fewer are seconds, twelve to fourteen milliseconds, fifteen to seventeen microseconds, eighteen or more nanoseconds. Set the dropdown to a fixed unit when your data breaks the rule, which happens with timestamps far in the future or with padded fixed-width columns.

  3. Read both columns, then go the other way

    UTC sits on the left and the zone you picked on the right, each with the ISO 8601 string, the sentence form, the day of the year, the ISO week and the offset in force on that date. The second panel runs the conversion backwards from a calendar date, and the batch box underneath takes a whole pasted column and returns a table you can copy as tab-separated text.

Technical specifications

Units acceptedSeconds, milliseconds, microseconds and nanoseconds, chosen by magnitude at 10^11, 10^14 and 10^17, or forced from the dropdown
Input toleratedLeading sign, decimal fraction to 12 places, and comma, apostrophe, underscore or space separators, all stripped before parsing
ArithmeticBigInt throughout — 1786276800123456789 keeps all 19 digits, where a double would round away the last three
Time zonesEvery identifier the IANA database ships, resolved through Intl.DateTimeFormat so a 2009 date gets the 2009 offset — 45-minute zones such as Nepal and the Chatham Islands included
Daylight savingRepeated and skipped local hours are detected and reported; the repeated hour returns both instants, 3,600 seconds apart
Date range0001-01-01 to 9999-12-31 for readable output; the underlying value may run to ±8,640,000,000,000,000 ms
Batch conversion500 lines per paste, mixed units, exported as tab-separated text alongside the day of year, ISO week and quarter shown for single values
Processing locationThis browser tab — no value is uploaded and none is logged

Frequently asked questions

Seconds or milliseconds — how do I tell which one I am holding?

Count the digits: ten means seconds, thirteen means milliseconds, and there is no overlap between them for any date you will meet at work. The rule generalises to 10^11, 10^14 and 10^17 as the boundaries between seconds, milliseconds, microseconds and nanoseconds, and all three cut-offs land on 16 November 5138 — so the reading is unambiguous for another three thousand years. The field above applies exactly that test and prints the digit count so you can see the reasoning rather than trust it.

Why did my converted date come out in January 1970?

Because a millisecond value was read as seconds, which shrinks it by a factor of a thousand and drops it back to the first fortnight of the epoch. A modern millisecond timestamp of 1700000000123 read as seconds would be the year 55,841, absurd enough that converters guard against that direction; the failure you actually get is the quiet one, 1700000000 read as milliseconds, which is 20 January 1970 at 16:13. If a value keeps arriving as 1970-01-01T00:00:00 exactly, the number reaching the converter is zero — usually an empty string or a null that something coerced.

What does a negative epoch value mean?

It counts backwards from 1 January 1970, so -86400 is 31 December 1969 and -2208988800 is the start of 1900. Negative values are ordinary arithmetic, but plenty of code mishandles them: an unsigned column silently wraps them to enormous positives, and integer division that truncates toward zero rather than toward the past puts the result a second out. Birth dates and historical records are where this bites, and it is worth checking that whatever stores them is signed.

Why do the UTC column and my own column show different days?

Because a single instant falls on two different calendar dates for anyone more than a few hours from Greenwich. An event at 23:31 UTC is already the next morning in Tokyo and still the same afternoon in Los Angeles, so a query grouped by date returns different totals depending on whose midnight it uses. That is the argument for storing the epoch integer and applying a zone only when something is displayed, and the two columns here exist to make the size of the gap obvious at a glance.

Can nanosecond timestamps be converted without losing digits?

Yes — every value here is carried through BigInt rather than a floating-point number. A double runs out of exact integers at 9,007,199,254,740,991, which is June 2255 read as microseconds and only 15 April 1970 read as nanoseconds, so a nanosecond timestamp pushed through JavaScript arithmetic quietly loses its final digits. That is why a Go UnixNano value pasted into most converters comes back with zeros on the end, and why the values above keep all nineteen digits.

What happens when I convert a date that the clocks skipped?

The converter says so instead of picking silently. Turning a calendar date into an epoch value needs a time zone, and twice a year a zone either deletes an hour or repeats one: 02:30 on the spring change never existed in New York, and 01:30 on the autumn change happens twice, an hour apart. The date-to-epoch panel names both cases and, for the repeated hour, gives you the second instant as well as the first.

How many timestamps can I convert at once?

Up to 500 lines in one paste, each measured on its own so a column of mixed seconds and milliseconds still comes out right. The table it produces copies as tab-separated text, which pastes straight into a spreadsheet column or a Markdown table. Nothing about the batch touches the network — the same JavaScript that handles one value handles five hundred.

About converting epoch values

An epoch value is a count, not a date. It says how many units have elapsed since 1 January 1970 at midnight UTC and carries nothing else: no unit label, no zone, no hint about whether it came from a database column, a log line or a browser. Everything a converter appears to know is inference — the unit from the magnitude, the calendar date from arithmetic on that count, the wall clock from a zone you supply. Getting any of the three wrong produces a date that looks entirely reasonable and is simply not the one you were given, which is why this page shows the digit count and the offset it applied instead of only the answer.

The zone half is the part that surprises people. A time zone is not a fixed number of hours; it is a schedule of rules that governments rewrite, and the IANA database that encodes them is amended several times a year. Converting 1288490400 for Europe means asking what the offset was on that date and not what it is today, which is why every offset here is resolved at the instant in question rather than looked up in a table. The same machinery is what lets the date-to-epoch panel tell you that a clock reading either never happened or happened twice. If your value is not a bare number at all but an eighteen-digit Windows quantity, an Excel serial or an ObjectId, the timestamp format translator identifies the shape first and then converts.

One practical habit removes most of this trouble: store the integer, convert at the edges. Keep epoch seconds or milliseconds in the database, pass them around as integers, and turn them into text only where a human will read them. Comparison, sorting and arithmetic then need no zone at all, and a bug in the display layer stays in the display layer. When you simply need the current value to paste into a query or a fixture, the live Unix timestamp page keeps it ticking with a copy button, so you do not have to reach for a converter at all.

Where the conversion happens

Every calculation on this page runs in your own browser. The value you paste, the batch column and the zone you pick are held in the tab and nowhere else, so nothing is uploaded and nothing is written to a log — which matters when the column you are converting came out of production data. Close the tab and it is gone.