Unix Timestamp to Date Converter
Paste an epoch number, get a readable date in any time zone — ISO 8601, RFC 2822, plain English and relative time. Seconds and milliseconds are detected automatically, and negative timestamps for dates before 1970 are handled correctly.
Convert a timestamp
Convert many at once
One timestamp per line. Useful for a column pasted straight out of a log file or spreadsheet — each line is detected and converted independently.
Reading an epoch number
A Unix timestamp is a count of seconds since 1970-01-01T00:00:00Z. To turn it into a date you need to decide three things, and getting any of them wrong produces a plausible-looking but incorrect answer.
The unit
Timestamps arrive in seconds, milliseconds, microseconds or nanoseconds depending on where they came from. Digit count is the fastest tell for contemporary dates:
| Unit | Digits | Example | Typical source |
|---|---|---|---|
| Seconds | 10 | 1700000000 | Unix date +%s, PHP time(), Python time.time(), JWT claims |
| Milliseconds | 13 | 1700000000000 | JavaScript Date.now(), Java currentTimeMillis(), Kafka |
| Microseconds | 16 | 1700000000000000 | PostgreSQL internal, Python datetime at full precision |
| Nanoseconds | 19 | 1700000000000000000 | Go UnixNano(), Prometheus, InfluxDB |
This converter reads seconds and milliseconds directly. Its rule: an absolute value of 100,000,000,000 or more is milliseconds, anything smaller is seconds. For microseconds or nanoseconds, chop the last 3 or 6 digits to get milliseconds first, or divide. The Seconds / Milliseconds radio buttons override the guess whenever you need them to.
The sign
A leading minus means "before 1970" and is completely valid. -86400 is 31 December 1969. Test any date-handling code you own with a negative value — mishandling it is one of the more common latent bugs in date libraries and homegrown parsers.
The time zone
The timestamp itself carries none. Picking a zone in the selector above changes only how the instant is displayed — the underlying number never changes. This is why the same timestamp can legitimately show two different calendar dates for two different people.
Worked examples
Checking whether a JWT has expired
A decoded token contains "exp": 1700000000. Paste it in. The relative line immediately says how long ago that was — no mental arithmetic, no ambiguity about whether the claim was in seconds or milliseconds (JWT exp is defined as seconds; a 13-digit value there is a bug in whatever issued the token).
1700000000 → 2023-11-14T22:13:20Z → "2 years ago"
A timestamp that renders as 1970
Someone reports that a record shows 1 January 1970. The stored value turns out to be 1700000:
1700000 → 1970-01-20T16:13:20Z
Seven digits, not ten. Something truncated the value or divided it one time too many. The tell is that the date is in the first few weeks of 1970 — a genuine 1970 date is rare, a corrupted one is common.
The same instant across three offices
Incident timestamp 1000000000, viewed from three zones by changing only the selector:
UTC 2001-09-09T01:46:40Z
America/Chicago 2001-09-08T20:46:40-05:00
Asia/Kolkata 2001-09-09T07:16:40+05:30
Different dates, different clock times, one instant. Note Kolkata’s half-hour offset — another reason not to hand-roll offset arithmetic.
Questions
Why does my timestamp show a date in the year 55840?
You forced seconds interpretation on a millisecond value, or a program did. 1,700,000,000,000 seconds after 1970 is the year 55,840. Switch the unit control to Milliseconds, or back to Auto-detect.
Can I paste a timestamp with commas or spaces?
Yes. Commas, spaces and underscores are stripped before parsing, so 1,700,000,000 and 1_700_000_000 both work. Anything else non-numeric produces an explicit error rather than a silent wrong answer.
What does the ISO week date row mean?
2023-W46-2 means ISO week 46 of 2023, day 2 (Tuesday). ISO weeks start on Monday and week 1 is the week containing the first Thursday of the year, which is why the ISO week-year occasionally differs from the calendar year in late December or early January.
Does it handle fractional seconds?
Yes — 1700000000.25 is accepted and rendered with millisecond precision as 2023-11-14T22:13:20.250Z. Precision below one millisecond is truncated, since that is the resolution of the underlying date representation.
Why is the relative time slightly different from another tool?
Relative formatting rounds to the nearest whole unit and uses average month and year lengths (30.44 days and 365.2425 days respectively). Different tools round at different boundaries, so "1 month ago" versus "4 weeks ago" is a display choice, not a disagreement about the instant.
Can I convert a date back into a timestamp?
Yes — use the date to timestamp page, or the main converter, which has both directions side by side.