Penukar Timestamp Unix
Tarikh & Waktu yang Ditukar
Penukar Timestamp Unix
Pengenalan
Timestamp Unix (juga dikenali sebagai masa POSIX atau masa Epoch) adalah sistem untuk menerangkan satu titik dalam masa. Ia adalah bilangan saat yang telah berlalu sejak 1 Januari 1970 (tengah malam UTC/GMT), tidak mengira saat lompat. Timestamp Unix digunakan secara meluas dalam sistem komputer dan bahasa pengaturcaraan kerana ia menyediakan representasi yang padat dan bebas bahasa bagi satu momen tertentu dalam masa.
Penukar ini membolehkan anda menukar timestamp Unix kepada format tarikh dan masa yang boleh dibaca manusia. Ia menyokong kedua-dua format masa 12-jam (AM/PM) dan 24-jam untuk memenuhi pelbagai pilihan serantau dan peribadi.
Cara Kerja Timestamp Unix
Timestamp Unix dikira sebagai bilangan saat sejak Epoch Unix (1 Januari 1970, 00:00:00 UTC). Ini menjadikannya sangat berguna untuk mengira perbezaan masa dan untuk menyimpan tarikh dalam format yang padat.
Penukaran matematik dari timestamp Unix kepada tarikh kalendar melibatkan beberapa langkah:
- Mulakan dengan Epoch Unix (1 Januari 1970, 00:00:00 UTC)
- Tambah bilangan saat dalam timestamp
- Ambil kira tahun lompat, panjang bulan yang berbeza, dan kompleksiti kalendar lain
- Terapkan penyesuaian zon waktu jika perlu
Sebagai contoh, timestamp Unix 1609459200
mewakili Jumaat, 1 Januari 2021, 00:00:00 UTC.
Formula penukaran boleh dinyatakan sebagai:
Kebanyakan bahasa pengaturcaraan dan sistem operasi menyediakan fungsi terbina dalam untuk mengendalikan penukaran ini, menyembunyikan pengiraan kalendar yang kompleks.
Pilihan Format Masa
Penukar ini menawarkan dua pilihan format masa:
-
Format 24-jam (kadang-kadang dipanggil "masa tentera"): Jam berkisar dari 0 hingga 23, dan tiada penetapan AM/PM. Sebagai contoh, 3:00 PM diwakili sebagai 15:00.
-
Format 12-jam: Jam berkisar dari 1 hingga 12, dengan AM (ante meridiem) untuk masa dari tengah malam hingga tengah hari, dan PM (post meridiem) untuk masa dari tengah hari hingga tengah malam. Sebagai contoh, 15:00 dalam format 24-jam diwakili sebagai 3:00 PM.
Pilihan antara format-format ini adalah sebahagian besar bergantung kepada konvensyen serantau dan pilihan peribadi:
- Format 24-jam digunakan secara umum di kebanyakan Eropah, Amerika Latin, dan Asia, serta dalam konteks saintifik, tentera, dan perubatan di seluruh dunia.
- Format 12-jam adalah lazim di Amerika Syarikat, Kanada, Australia, dan beberapa negara berbahasa Inggeris yang lain untuk penggunaan sehari-hari.
Kes Khas dan Had
Apabila bekerja dengan timestamp Unix, adalah penting untuk menyedari beberapa kes khas dan had:
-
Timestamp negatif: Ini mewakili tarikh sebelum Epoch Unix (1 Januari 1970). Walaupun secara matematik sah, beberapa sistem mungkin tidak mengendalikan timestamp negatif dengan betul.
-
Masalah Tahun 2038: Timestamp Unix sering disimpan sebagai integer bertanda 32-bit, yang akan melimpah pada 19 Januari 2038. Selepas titik ini, sistem 32-bit tidak akan dapat mewakili masa dengan betul melainkan diubah untuk menggunakan jenis integer yang lebih besar.
-
Timestamp yang sangat besar: Tarikh masa depan yang sangat jauh mungkin tidak dapat diwakili dalam beberapa sistem, atau mungkin ditangani secara tidak konsisten.
-
Saat lompat: Masa Unix tidak mengambil kira saat lompat, yang kadang-kadang ditambah kepada UTC untuk mengimbangi putaran Bumi yang tidak teratur. Ini bermakna masa Unix tidak diselaraskan dengan tepat dengan masa astronomi.
-
Pertimbangan zon waktu: Timestamp Unix mewakili momen dalam UTC. Menukar kepada waktu tempatan memerlukan maklumat zon waktu tambahan.
-
Waktu Penjimatan Siang: Apabila menukar timestamp kepada waktu tempatan, kompleksiti transisi Waktu Penjimatan Siang mesti dipertimbangkan.
Kes Penggunaan
Timestamp Unix digunakan dalam pelbagai aplikasi di seluruh pengkomputeran dan pengurusan data:
-
Rekod Pangkalan Data: Timestamp biasanya digunakan untuk merekod apabila entri dibuat atau diubah.
-
Pembangunan Web: Header HTTP, kuki, dan mekanisme caching sering menggunakan timestamp Unix.
-
Fail Log: Log sistem biasanya merekodkan peristiwa dengan timestamp Unix untuk urutan kronologi yang tepat.
-
Sistem Kawalan Versi: Git dan sistem VCS lain menggunakan timestamp untuk merekodkan bila komit dibuat.
-
Respons API: Banyak API web menyertakan timestamp dalam respons mereka untuk menunjukkan bila data dihasilkan atau bila sumber terakhir diubah.
-
Sistem Fail: Masa penciptaan dan pengubahsuaian fail sering disimpan sebagai timestamp Unix.
-
Pengurusan Sesi: Aplikasi web menggunakan timestamp untuk menentukan bila sesi pengguna harus tamat.
-
Analisis Data: Timestamp menyediakan cara yang standard untuk bekerja dengan data temporal dalam aplikasi analitik.
Alternatif
Walaupun timestamp Unix digunakan secara meluas, terdapat format representasi masa alternatif yang mungkin lebih sesuai dalam konteks tertentu:
-
ISO 8601: Format string standard (contohnya, "2021-01-01T00:00:00Z") yang boleh dibaca manusia sambil mengekalkan kebolehsortiran. Ia sering lebih disukai untuk pertukaran data dan aplikasi yang menghadapi pengguna.
-
RFC 3339: Profil ISO 8601 yang digunakan dalam protokol internet, dengan keperluan format yang lebih ketat.
-
Format yang boleh dibaca manusia: Rentetan tarikh yang dilokalisasi (contohnya, "1 Januari 2021") lebih sesuai untuk interaksi langsung dengan pengguna tetapi kurang sesuai untuk pengiraan.
-
Microsoft FILETIME: Nilai 64-bit yang mewakili bilangan interval 100-nanodetik sejak 1 Januari 1601, digunakan dalam sistem Windows.
-
Nombor Hari Julian: Digunakan dalam astronomi dan beberapa aplikasi saintifik, mengira hari sejak 1 Januari 4713 SM.
Pilihan format masa bergantung kepada faktor seperti:
- Ketepatan yang diperlukan
- Keperluan kebolehbaca manusia
- Kekangan penyimpanan
- Keserasian dengan sistem sedia ada
- Julat tarikh yang perlu diwakili
Sejarah
Konsep masa Unix berasal dari pembangunan sistem operasi Unix di Bell Labs pada akhir 1960-an dan awal 1970-an. Keputusan untuk menggunakan 1 Januari 1970 sebagai epoch adalah agak arbitrari tetapi praktikal pada masa itu—ia cukup baru untuk meminimumkan keperluan penyimpanan untuk tarikh yang menarik tetapi cukup jauh ke masa lalu untuk berguna bagi data sejarah.
Pelaksanaan asal menggunakan integer bertanda 32-bit untuk menyimpan bilangan saat, yang mencukupi untuk jangka hayat sistem Unix yang dijangkakan pada masa itu. Walau bagaimanapun, keputusan ini membawa kepada Masalah Tahun 2038 (kadang-kadang dipanggil "Y2K38" atau "Bug Milenium Unix"), kerana integer bertanda 32-bit hanya boleh mewakili tarikh sehingga 1 Januari 2038 (03:14:07 UTC).
Apabila Unix dan sistem yang serupa Unix semakin popular, timestamp Unix menjadi standard de facto untuk mewakili masa dalam pengkomputeran. Ia diterima pakai oleh banyak bahasa pengaturcaraan, pangkalan data, dan aplikasi, melampaui persekitaran Unix asalnya.
Sistem moden semakin menggunakan integer 64-bit untuk timestamp, yang memperluaskan julat yang boleh diwakili kepada kira-kira 292 bilion tahun ke kedua-dua arah dari epoch, secara efektif menyelesaikan Masalah Tahun 2038. Walau bagaimanapun, sistem dan aplikasi warisan mungkin masih terdedah.
Kesederhanaan dan utiliti timestamp Unix telah memastikan relevansinya yang berterusan walaupun dengan perkembangan format representasi masa yang lebih canggih. Ia kekal sebagai konsep asas dalam pengkomputeran, menyokong banyak infrastruktur digital kita.
Contoh Kod
Berikut adalah contoh cara menukar timestamp Unix kepada tarikh yang boleh dibaca manusia dalam pelbagai bahasa pengaturcaraan:
// Penukaran timestamp JavaScript
function convertUnixTimestamp(timestamp, use12Hour = false) {
// Buat objek Date baru (JavaScript menggunakan milisaat)
const date = new Date(timestamp * 1000);
// Pilihan format
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
// Tukar kepada string menggunakan format lokal
return date.toLocaleString(undefined, options);
}
// Contoh penggunaan
const timestamp = 1609459200; // 1 Januari 2021 00:00:00 UTC
console.log(convertUnixTimestamp(timestamp, false)); // Format 24-jam
console.log(convertUnixTimestamp(timestamp, true)); // Format 12-jam
Mengendalikan Kes Khas
Apabila bekerja dengan timestamp Unix, adalah penting untuk mengendalikan kes khas dengan betul. Berikut adalah contoh mengendalikan beberapa kes khas yang biasa:
// Pengendalian kes khas JavaScript
function safeConvertTimestamp(timestamp, use12Hour = false) {
// Semak jika timestamp sah
if (timestamp === undefined || timestamp === null || isNaN(timestamp)) {
return "Timestamp tidak sah";
}
// Semak untuk timestamp negatif (tarikh sebelum 1970)
if (timestamp < 0) {
// Beberapa pelayar mungkin tidak mengendalikan timestamp negatif dengan betul
// Gunakan pendekatan yang lebih kukuh untuk tarikh sebelum 1970
const date = new Date(timestamp * 1000);
if (isNaN(date.getTime())) {
return "Tarikh tidak sah (sebelum 1970)";
}
}
// Semak untuk masalah Y2K38 (untuk sistem 32-bit)
const maxInt32 = 2147483647; // Nilai maksimum untuk integer bertanda 32-bit
if (timestamp > maxInt32) {
// Pertimbangkan untuk menggunakan BigInt untuk timestamp yang sangat besar dalam JavaScript moden
console.warn("Timestamp melebihi had integer 32-bit (masalah Y2K38)");
}
// Teruskan dengan penukaran biasa
try {
const date = new Date(timestamp * 1000);
const options = {
year: 'numeric',
month: 'long',
day: 'numeric',
weekday: 'long',
hour: use12Hour ? 'numeric' : '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: use12Hour
};
return date.toLocaleString(undefined, options);
} catch (error) {
return "Ralat menukar timestamp: " + error.message;
}
}
Rujukan
-
"Masa Unix." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/Unix_time
-
"Masalah Tahun 2038." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/Year_2038_problem
-
Olson, Arthur David. "Kompleksiti Masa Kalendar." The Open Group, https://www.usenix.org/legacy/events/usenix01/full_papers/olson/olson.pdf
-
"ISO 8601." Wikipedia, Yayasan Wikimedia, https://en.wikipedia.org/wiki/ISO_8601
-
"RFC 3339: Tarikh dan Masa di Internet: Timestamp." Kumpulan Kejuruteraan Internet (IETF), https://tools.ietf.org/html/rfc3339
-
Kernighan, Brian W., dan Dennis M. Ritchie. "Bahasa Pengaturcaraan C." Prentice Hall, 1988.