0
1970-01-01T00:00:00Z
946684800
2000-01-01T00:00:00Z
2147483647
2038-01-19T03:14:07Z — max for 32-bit signed int
9223372036854775807
~292 billion years — no practical overflow
86400000
60 × 60 × 24 × 1000
31536000
365 × 24 × 60 × 60 (non-leap)
2024-01-15T12:30:00Z
YYYY-MM-DDTHH:MM:SSZ — widely recommended
2024-01-15T07:30:00-05:00
YYYY-MM-DDTHH:MM:SS±HH:MM
Mon, 15 Jan 2024 12:30:00 +0000
Used in email headers and HTTP headers
2024-01-15T12:30:00.000Z
Subset of ISO 8601 with milliseconds
Mon, 15 Jan 2024 12:30:00 GMT
Used in HTTP headers (Last-Modified, Date)
01/15/2024
Ambiguous — avoid in APIs
15/01/2024
Ambiguous — avoid in APIs
2024-01-15
SQL DATE type, BigQuery, Redshift
20240115123000
Lexicographically sortable
Date.now()
Returns milliseconds since epoch
Math.floor(Date.now() / 1000)
Returns whole seconds
new Date(ts * 1000).toISOString()
Multiply by 1000 if ts is in seconds
Math.floor(new Date('2024-01-15T12:30:00Z').getTime() / 1000)import time; time.time()
Returns float with sub-second precision
from datetime import datetime, timezone datetime.fromtimestamp(ts, tz=timezone.utc)
Always pass tz=timezone.utc to avoid local timezone
from datetime import datetime, timezone
datetime.fromisoformat('2024-01-15T12:30:00+00:00').timestamp()SELECT EXTRACT(EPOCH FROM NOW())::BIGINT;
Returns whole seconds
SELECT to_timestamp(1705319400);
SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(1705319400);
time.Now().UnixNano()
Nanoseconds precision
time.Now().Unix()
SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_secs()
time()
Returns seconds; microtime(true) for float
date +%s
GNU/BSD date; on macOS same command works
+00:00
Coordinated Universal Time — no DST
-05:00 / -04:00
EST in winter, EDT in summer (DST)
-06:00 / -05:00
-07:00 / -06:00
-08:00 / -07:00
+00:00 / +01:00
BST (British Summer Time) in summer
+01:00 / +02:00
Germany, France, Italy, Poland, etc.
+05:30
No DST — half-hour offset
+08:00
No DST — entire country one timezone
+09:00
No DST
+10:00 / +11:00
DST in southern hemisphere summer (Oct–Apr)
+12:00 / +13:00
| Satuan | Digit | Contoh | Rentang kira-kira |
|---|---|---|---|
| Seconds (s) | 10 | 1705319400 | 1970 – 2286 |
| Milliseconds (ms) | 13 | 1705319400000 | 1970 – 2286 (×1000) |
| Microseconds (μs) | 16 | 1705319400000000 | Sub-second precision |
| Nanoseconds (ns) | 19 | 1705319400000000000 | Used by Go, Rust, Linux kernel |
Unix timestamp selalu UTC. Timestamp tidak mengandung informasi zona waktu. Ini sebenarnya adalah fitur — memberikan titik referensi universal.
Kebingungan muncul saat mengonversi timestamp ke tanggal yang mudah dibaca manusia:
const ts = 1700000000;
const date = new Date(ts * 1000);
date.toUTCString(); // "Tue, 14 Nov 2023 22:13:20 GMT"
date.toLocaleString(); // Depends on user's local time zone
date.toISOString(); // "2023-11-14T22:13:20.000Z"
Praktik terbaik: Simpan dan kirim timestamp dalam UTC. Konversi ke waktu lokal hanya di lapisan tampilan, sedekat mungkin dengan pengguna.
-- Current timestamp
SELECT EXTRACT(EPOCH FROM NOW());
-- Timestamp to date
SELECT TO_TIMESTAMP(1700000000);
-- Date to timestamp
SELECT EXTRACT(EPOCH FROM '2023-11-14'::timestamp);
Jika tanggal menunjukkan Januari 1970, Anda mungkin memasukkan detik di mana milidetik yang diharapkan (atau sebaliknya). Selalu periksa presisi mana yang diharapkan oleh API.
Saat menyimpan timestamp sebagai angka floating-point, Anda mungkin kehilangan presisi melebihi milidetik. Untuk presisi mikrodetik atau nanodetik, gunakan integer dengan pengali yang sesuai.
Unix timestamp tidak memperhitungkan detik kabisat. Satu hari Unix selalu tepat 86.400 detik, meskipun hari UTC aktual kadang memiliki 86.401 detik. Untuk sebagian besar aplikasi, ini tidak relevan. Untuk aplikasi ilmiah atau satelit, gunakan TAI (International Atomic Time) sebagai gantinya.
Simpan tanggal sebagai timestamp (integer atau tipe datetime native) untuk pengurutan, perbandingan, dan aritmetika yang efisien. String terformat lebih sulit untuk di-query dan diurutkan dengan benar. Sebagian besar database memiliki tipe datetime native yang menangani ini dengan baik. Cadangkan pemformatan string untuk tampilan dan respons API.
Timestamp Unix (juga disebut epoch time) adalah jumlah detik yang telah berlalu sejak 00:00:00 UTC pada 1 Januari 1970, tanpa menghitung detik kabisat. Ini adalah bilangan bulat tunggal yang mengidentifikasi secara tepat setiap momen dalam waktu, terlepas dari zona waktu.
Timestamp Unix tradisional menghitung detik penuh. Bahasa dan API modern (JavaScript Date.now(), Java System.currentTimeMillis()) menggunakan milidetik — 1000× lebih besar — untuk presisi sub-detik. Saat berinteroperasi, selalu periksa besarannya: angka 10 digit adalah detik, angka 13 digit adalah milidetik.
Integer bertanda 32-bit dapat merepresentasikan timestamp hingga 2.147.483.647, yang sesuai dengan 03:14:07 UTC pada 19 Januari 2038. Setelah momen itu, sistem 32-bit akan meluap ke nilai negatif. Sistem 64-bit dapat merepresentasikan tanggal jauh melampaui tahun 292 miliar.
Di JavaScript: new Date(ts * 1000).toISOString(). Di Python: datetime.fromtimestamp(ts, tz=timezone.utc).isoformat(). Di SQL (PostgreSQL): to_timestamp(ts). Format ISO 8601 adalah YYYY-MM-DDTHH:MM:SSZ untuk UTC, mis. 2024-01-15T12:30:00Z.