Unix Timestamp: Panduan Lengkap
Unix timestamp adalah cara fundamental untuk merepresentasikan waktu dalam komputasi. Memahami cara kerja timestamp, cara mengonversinya, dan cara menangani timezone dengan benar sangat penting untuk setiap developer yang bekerja dengan data temporal. Panduan ini mencakup semua yang perlu Anda ketahui tentang Unix timestamp dan praktik terbaik untuk bekerja dengan waktu.
Apa itu Unix Timestamp?
Unix timestamp (juga disebut Epoch time atau POSIX time) adalah sistem untuk menggambarkan titik dalam waktu sebagai jumlah detik yang telah berlalu sejak 00:00:00 UTC pada 1 Januari 1970, tidak termasuk leap second. Tanggal ini dikenal sebagai "Unix epoch." Misalnya, timestamp 1609459200 mewakili 00:00:00 UTC pada 1 Januari 2021. Representasi sederhana ini menjadikan timestamp sangat berguna untuk komputasi. Ini hanya integer tunggal, membuatnya mudah disimpan, ditransmisikan, dan dibandingkan. Menghitung durasi antara dua timestamp adalah pengurangan sederhana. Mengurutkan event berdasarkan waktu adalah perbandingan numerik yang mudah. Tidak ada ambiguitas tentang format—1609459200 berarti hal yang sama persis di setiap sistem, di setiap bahasa pemrograman, di setiap zona waktu. Alasan untuk memilih 1 Januari 1970 sebagai epoch sebagian besar adalah historis. Unix dikembangkan pada akhir 1960-an dan awal 1970-an, dan memilih epoch baru-baru ini masuk akal. Tanggal tepatnya dipilih karena jatuh pada hari Kamis, awal dekade yang rapi, dan cukup baru sehingga timestamps negatif (untuk tanggal sebelum 1970) jarang dalam praktik. Hari ini, epoch Unix telah menjadi standar de facto di seluruh komputasi. Timestamp asli Unix adalah integer 32-bit signed, yang berarti mereka dapat mewakili tanggal dari 13 Desember 1901 hingga 19 Januari 2038. "Masalah tahun 2038" terjadi ketika timestamp 32-bit akan melampaui nilai maksimumnya (2,147,483,647 detik sejak epoch) dan wrap around ke nilai negatif. Sistem modern sebagian besar telah bermigrasi ke timestamp 64-bit, yang dapat mewakili tanggal hingga lebih dari 292 miliar tahun ke masa depan, secara efektif menyelesaikan masalah ini. Meskipun disebut Unix timestamp, konsep ini digunakan jauh melampaui sistem operasi Unix. JavaScript, Python, Java, PHP, dan hampir setiap bahasa pemrograman modern memiliki fungsi untuk bekerja dengan Unix timestamp. Database menyimpan timestamp dalam format ini. API web bertukar timestamp. Protokol jaringan menggunakannya untuk sinkronisasi waktu.
Bekerja dengan Timezone
Timezone adalah salah satu aspek paling menantang dari pemrograman waktu. Unix timestamp sendiri tidak memiliki timezone—mereka mewakili titik spesifik dalam waktu universal. Timestamp 1609459200 adalah momen yang sama apakah Anda di New York, Tokyo, atau London. Namun, saat mengonversi timestamp ke tanggal dan waktu yang dapat dibaca manusia, timezone menjadi penting. Saat Anda mengonversi timestamp ke format yang dapat dibaca, Anda harus memutuskan timezone mana yang akan digunakan. Timestamp yang sama akan ditampilkan sebagai tanggal dan waktu yang berbeda di timezone yang berbeda. 1609459200 adalah 00:00:00 pada 1 Januari 2021 di UTC, tetapi 01:00:00 di Paris (UTC+1), 19:00:00 pada 31 Desember 2020 di New York (UTC-5 selama musim dingin), dan 09:00:00 pada 1 Januari 2021 di Tokyo (UTC+9). Praktik terbaik adalah selalu menyimpan timestamp di UTC di database Anda dan hanya mengonversi ke timezone lokal untuk tampilan kepada pengguna. Menyimpan waktu dalam timezone lokal mengarah pada masalah selama daylight saving time transisi, ketika pengguna berpindah timezone, atau ketika aplikasi Anda melayani pengguna internasional. UTC adalah netral dan tidak ambigu—tidak ada daylight saving time, tidak ada perubahan politik, tidak ada kompleksitas. Daylight saving time (DST) menambahkan kompleksitas lebih lanjut. Banyak timezone menggeser jam mereka maju satu jam di musim semi dan mundur di musim gugur. Ini berarti "2:30 AM pada hari DST dimulai" mungkin tidak ada (jam melompat dari 2:00 ke 3:00), dan "2:30 AM pada hari DST berakhir" terjadi dua kali. Unix timestamp sepenuhnya menghindari ambiguitas ini karena mereka dalam UTC, yang tidak mengamati DST. Saat menampilkan waktu kepada pengguna, deteksi timezone browser mereka atau biarkan mereka memilih zona waktu preferensi mereka. Sebagian besar bahasa pemrograman modern dan library memiliki fungsi untuk secara otomatis mengonversi timestamp ke timezone lokal pengguna. JavaScript, misalnya, dapat mendeteksi timezone browser dan memformat timestamp sesuai. Untuk aplikasi global, pertimbangkan menampilkan waktu dalam timezone pengguna tetapi juga menyediakan UTC atau timestamp lokal untuk referensi. Untuk event terjadwal (seperti webinar atau rilis), jelas komunikasikan timezone dan berikan konverter untuk pengguna internasional. Konfusi timezone adalah sumber umum dari missed meetings dan bug aplikasi. Library seperti Moment.js (meskipun sekarang dalam mode pemeliharaan), date-fns-tz, Luxon, atau Day.js membuat bekerja dengan timezone lebih mudah. Mereka menangani DST transisi, offset timezone, dan konversi dengan benar, mencegah bug halus yang dapat muncul dengan manipulasi tanggal manual.
Praktik Terbaik Timestamp
Selalu simpan timestamp di UTC dalam database Anda. Ini adalah aturan paling penting dari pemrograman waktu. UTC tidak memiliki daylight saving time, tidak memiliki ambiguitas, dan membuatnya mudah untuk membandingkan dan menghitung waktu di berbagai timezone. Konversi ke timezone lokal hanya untuk tampilan kepada pengguna, tidak pernah untuk penyimpanan atau perhitungan. Gunakan timestamp Unix untuk penyimpanan dan perhitungan, bukan string tanggal. String seperti "2021-01-01 12:00:00" ambigu (timezone apa?), lebih besar untuk disimpan, dan lebih lambat untuk dibandingkan. Timestamp adalah integer sederhana yang tidak ambigu, kompak, dan cepat. Simpan sebagai timestamp, format sebagai string hanya untuk tampilan. Saat menerima input tanggal dari pengguna, selalu tangkap timezone mereka atau asumsikan UTC dan dokumentasikan dengan jelas. Jika pengguna memasukkan "1 Januari 2021 12:00", apakah itu dalam timezone mereka atau UTC? Ambiguitas mengarah pada bug. Baik secara eksplisit meminta timezone atau jelas mendokumentasikan asumsi Anda. Untuk API, gunakan ISO 8601 format dengan offset timezone (seperti "2021-01-01T12:00:00+00:00" untuk UTC atau "2021-01-01T12:00:00-05:00" untuk EST). Format ini tidak ambigu dan didukung secara luas. Hindari format tanggal ambigu seperti "01/02/2021" (apakah itu 1 Februari atau 2 Januari?). ISO 8601 menghilangkan kebingungan ini. Perhatikan presisi timestamp. Unix timestamp tradisional dalam detik, tetapi banyak sistem modern menggunakan millisecond (seperti JavaScript Date.now()) atau bahkan microsecond atau nanosecond. Saat bertukar timestamp antara sistem, jelas dokumentasikan unit—apakah 1609459200000 dalam millisecond atau detik membuat perbedaan besar. Validasi timestamp sebelum menggunakannya. Periksa bahwa mereka berada dalam rentang yang masuk akal—timestamp negatif atau nilai yang sangat besar mungkin mengindikasikan error. Timestamp di masa depan mungkin valid untuk event terjadwal, tetapi timestamp ratusan tahun di masa depan mungkin bug. Uji logika waktu Anda di berbagai timezone dan selama DST transisi. Bug waktu sering hanya muncul dua kali setahun ketika jam berubah, atau ketika pengguna di timezone tertentu melaporkan masalah. Test suite Anda harus mencakup kasus edge ini. Dokumentasikan asumsi timezone Anda dengan jelas dalam kode dan API documentation. Komentar seperti "// timestamp dalam detik sejak Unix epoch (UTC)" atau "// input diasumsikan timezone pengguna" mencegah kebingungan dan bug. Untuk logging dan debugging, pertimbangkan mencatat timestamp dalam UTC dan format yang dapat dibaca manusia. "1609459200 (2021-01-01 00:00:00 UTC)" membuatnya mudah bagi manusia untuk membaca log sementara melestarikan timestamp yang tepat untuk analisis terprogram.
Coba Alat
Converter Timestamp
Pelajari Lebih Lanjut
Apa itu Unix Timestamp?
Unix timestamp adalah cara standar untuk merepresentasikan waktu dalam komputasi. Panduan ini menjelaskan cara kerjanya dengan jelas.
Dasar-dasar Timezone
Timezone adalah salah satu aspek paling menantang dari pemrograman waktu. Panduan ini menjelaskan cara menangani mereka dengan benar.
FAQ
Converter Timestamp
FAQ →