Epoch Converter
Paste a Unix timestamp to see when it is — or edit the date to get the timestamp. Also known as Unix time or POSIX time.
Paste a timestamp above, or type a date here.
What is a Unix timestamp?
Unix time (also known as POSIX time or epoch time) counts how much time has elapsed since the Unix epoch — January 1, 1970 at 00:00:00 UTC. It's the standard way computers represent time internally and is used across programming languages, databases, APIs, and system logs. Timestamps before 1970 are simply negative: -86400 is December 31, 1969.
Is a Unix timestamp in seconds or milliseconds?
There is no single answer — it depends on which ecosystem produced the value. Three conventions are in wide use, and mixing them up is the most common source of dates landing in 1970 or in the year 56,000. As a rule of thumb, count the digits: a present-day timestamp is 10 digits in seconds, 13 in milliseconds, 16 in microseconds and 19 in nanoseconds.
Which unit does my stack use?
Seconds — the specification unit
Used wherever a format is defined by a spec rather than a runtime: POSIX time_t, filesystem timestamps, date +%s, cron, Redis EXPIREAT, and JWT exp/iat/nbf, which RFC 7519 defines as NumericDate — always seconds. Also Python time.time(), Go Time.Unix(), PHP time() and PostgreSQL extract(epoch from ...).
Milliseconds — the runtime unit
What language runtimes hand you: JavaScript Date.now(), Java System.currentTimeMillis() and Instant.toEpochMilli(), Kotlin, Elasticsearch epoch_millis, Kafka record timestamps and MongoDB's BSON date. Because most JSON APIs are written in these stacks, milliseconds is what you'll usually find in a payload.
Nanoseconds — the observability unit
Used where ordering matters more than readability: OpenTelemetry's OTLP time_unix_nano, InfluxDB's default precision, Go time.UnixNano(), and Linux clock_gettime. Note that a nanosecond timestamp exceeds JavaScript's safe integer range, so it must be handled as a string or BigInt rather than a number.
Why does an epoch timestamp have no timezone?
An epoch timestamp represents an absolute instant — the same moment everywhere on Earth. It's always relative to UTC, so there's no timezone ambiguity. This is its key advantage over human-readable formats: 1721044800 means the exact same instant whether you're in Tokyo, London, or New York. The human-readable representation changes depending on timezone, but the epoch value does not. That's why the timezone selector above changes the date shown but never the timestamp itself.
Where will I run into epoch timestamps?
API responses
JSON created_at, expires_at fields
JWTs
iat, exp, nbf claims (epoch seconds)
Databases
PostgreSQL extract(epoch from ...), SQLite
Log files
syslog, nginx, application logs for sortability
Cron & scheduling
Task schedulers and rate limiters
File systems
mtime, ctime, atime on Unix
How many digits should a timestamp have?
| Precision | Digits | Used by |
|---|---|---|
| Seconds | 10 | POSIX, JWT claims, cron, Python time.time() |
| Milliseconds | 13 | JavaScript Date.now(), Java, Kafka |
| Microseconds | 16 | Go time.UnixMicro(), ClickHouse |
| Nanoseconds | 19 | OpenTelemetry, InfluxDB, Go time.UnixNano() |
Digit counts describe present-day timestamps only — they shift as time passes and break entirely for values before 2001 or after 5138. PostgreSQL is a common trap here: extract(epoch from ...) returns seconds, while its internal timestamp storage counts microseconds from 2000-01-01, a different epoch altogether.