NV ToolkitFormat · Validate · Convert

Text Tools

Epoch / Unix Timestamp Converter

Paste a timestamp in seconds or milliseconds — or a date string — and get every form of the same instant at once, without ever consulting the clock.

In short

Convert a Unix timestamp to a date, or a date back to epoch time. Detects seconds or milliseconds and reports UTC, RFC 2822, ISO week and Excel serial.

By NaveenKumar T · Updated

Learn: Cron Expression Syntax Explained: Fields, Special Characters and Real Schedules

  • Auto-detects seconds vs milliseconds
  • Accepts ISO 8601 and RFC dates too
  • UTC ISO, RFC 2822, weekday, day of year

Runs entirely in your browser — nothing you paste or open here is uploaded, logged, or stored.How we handle data →

Example

Epoch Converter: input and output

A ten-digit timestamp of the kind you would pull out of a JWT `exp` claim or a log line, with the Unit control left on Auto.

Timestamp
1788998400
Report
Input             : 1788998400
Detected unit     : seconds (auto-detected from 10 digits)

UTC ISO 8601      : 2026-09-10T00:00:00.000Z
RFC 2822 (UTC)    : Thu, 10 Sep 2026 00:00:00 +0000
UTC date          : 2026-09-10
UTC time          : 00:00:00.000
Weekday           : Thursday
Day of year       : 253 of 365
ISO week date     : 2026-W37-4

Unix seconds      : 1788998400
Unix milliseconds : 1788998400000
Unix microseconds : 1788998400000000
Excel serial      : 46275.000000

Ten digits, so Auto reads the number as seconds and says so. Note the ISO week date `2026-W37-4` — week 37, weekday 4, i.e. the Thursday — and the Excel serial 46275, which you can paste straight into a spreadsheet cell and format as a date. Force the Unit control to Milliseconds and the same number resolves to 1970-01-21 instead, which is what a units mix-up looks like.

Learn more

Unix time, and why a bare number is ambiguous

Unix time counts the seconds elapsed since 1970-01-01T00:00:00Z, ignoring leap seconds — the definition POSIX gives the `time()` system call every Unix-like OS implements. It is the timestamp format of log lines, JWT claims, database columns, HTTP caching headers, cron bookkeeping and roughly every API that has ever had to serialize an instant, precisely because it carries no timezone, no calendar and no locale — just a count. The trouble is that the count comes in units, and the unit is never written down next to it.

The same instant is `1788998400` in seconds, `1788998400000` in milliseconds, and `1788998400000000` in microseconds. JavaScript's `Date.now()` returns milliseconds; Python's `time.time()`, PostgreSQL's `extract(epoch from …)` and Go's `Unix()` return seconds; Java's `System.currentTimeMillis()` returns milliseconds while `Instant.getEpochSecond()` returns seconds; ClickHouse and some tracing systems emit microseconds or nanoseconds. Feed a seconds value to something expecting milliseconds and you get a date in January 1970; feed a milliseconds value to something expecting seconds and you land tens of thousands of years in the future. Both failures are common, and both look like a data problem rather than a units problem until someone converts the number by hand.

That is what the Unit control on this page is for. Left on Auto it decides by magnitude and tells you what it decided, which is right almost always. Forced to Seconds or Milliseconds it shows you the other reading, which is how you confirm a suspicion: if your ten-digit number read as milliseconds lands in January 1970, you have found the bug. The report's ISO 8601 line follows RFC 3339, the internet-friendly profile of ISO 8601 that JSON APIs and HTTP headers standardise on — a trailing Z for UTC, no ambiguous two-digit years.

Every unit in the output, and where it comes from

The report gives all the forms at once rather than making you pick one, because when you are debugging a timestamp you usually need two of them — the human-readable date to know what happened, and a different numeric unit to paste into whatever asked for it.

Timestamp units and the systems that emit them
UnitDigits todayWhere you meet itExample
Seconds10JWT `exp`/`iat`, Python `time.time()`, Postgres, Go, `date +%s`1788998400
Milliseconds13JavaScript `Date.now()`, Java `currentTimeMillis()`, MongoDB1788998400000
Microseconds16ClickHouse, some tracing and metrics pipelines1788998400000000
ISO 8601 (UTC)—JSON APIs, logs, anything human-facing2026-09-10T00:00:00.000Z
RFC 2822—Email headers, HTTP `Date`, RSS `pubDate`Thu, 10 Sep 2026 00:00:00 +0000
ISO week date—Reporting, data warehouses, planning tools2026-W37-4
Excel serial5Excel, Google Sheets, CSV exports46275.000000

The bugs an epoch converter actually finds

A 401 at two in the morning is the classic. Decode the bearer token with the JWT Decoder, take the `exp` claim, paste it here, and the question 'is this token expired or is the signature wrong?' is answered in one step instead of by arithmetic on a phone calculator. The `iat` and `nbf` claims fail the same way and for the same reason: a service whose clock has drifted by more than the allowed skew rejects tokens that are, by its reckoning, from the future.

The second is the units mix-up described above, which turns up most often at a system boundary — a JavaScript front end sending `Date.now()` to a backend that stores seconds, or a data import where one source column is in milliseconds and another in seconds. If half your rows say 1970 and half say the right year, that is what you are looking at, and forcing the Unit option both ways confirms it in seconds.

The third is calendar rather than numeric. The weekday, day of year and ISO week date lines exist because scheduled jobs and reports break on exactly those fields: a job that was supposed to run on a Monday fired on Sunday because someone's week starts on a different day, or a weekly report double-counted because the ISO week-numbering year at the turn of the calendar year is not the calendar year. For building and reading the schedules themselves, the Cron Expression Generator translates an expression into plain English and shows its next run times; this page is where you check what a timestamp the job produced actually means.

Help

Frequently asked questions

Everything you need to know about the Epoch Converter.

01How does it know whether my number is seconds or milliseconds?

By magnitude. A value below 100,000,000,000 is read as seconds and anything at or above it as milliseconds, which is the boundary that separates the two in every realistic case: current epoch seconds are ten digits and current epoch milliseconds are thirteen. The report always says which reading it used and how it decided, and the Unit option forces the interpretation when you know better than the heuristic — for example when you deliberately want to see what a ten-digit number means read as milliseconds.

02Can I go the other way, from a date to a timestamp?

Yes — that is the same box. Paste `2026-09-10T00:00:00Z`, `2026-09-10`, or an RFC-style string like `Thu, 10 Sep 2026 00:00:00 GMT`, and the report includes the Unix seconds, milliseconds and microseconds for that instant. A string with an explicit offset or a trailing Z is unambiguous; a bare date-time with no offset is interpreted per the JavaScript specification, which the report notes, so add a Z or an offset when it matters.

03Why doesn't it show 'time from now' or my local time?

Deliberately. Everything reported here is a pure function of the input, so the same paste produces the same output on your machine, on your colleague's, and in the bug report you attach it to — no ambiguity about whose clock or whose timezone was involved when the two of you compare notes. Local time is where epoch bugs hide, not where they are diagnosed; UTC is the form worth agreeing on.

04What is the Excel serial number in the output?

The number spreadsheets store behind a formatted date: days since 1899-12-30, with fractional days for the time of day. 1970-01-01 is serial 25569. Paste that number into an Excel or Google Sheets cell and format it as a date and you get the same instant back, which is the fastest way to move a timestamp column out of a log and into a spreadsheet. The odd 1899-12-30 origin exists because Excel deliberately reproduces a Lotus 1-2-3 bug that treats 1900 as a leap year.

05What is the ISO week date line for?

It is the `2026-W37-4` form defined by ISO 8601: week-numbering year, week number, and weekday where Monday is 1 and Sunday is 7. Reporting and data-warehouse tooling groups by it constantly, and it has a trap worth seeing spelled out — the week-numbering year is not always the calendar year. 2027-01-01 falls in week 53 of 2026, so a naive `YEAR(date)` combined with a `WEEK(date)` produces a week that does not exist.

Keep working

Related tools

Learn the format

Related guides

All guides →