Cara Tukar Unix Timestamp kepada Tarikh: Panduan Lengkap Pembangun

Developer guide to convert unix timestamp to date showing epoch datetime conversion with code examples

Jika awak pernah menatap nombor seperti 1717200000 dan tertanya-tanya tarikh apa yang diwakilinya, awak tidak bersendirian. Mempelajari cara menukar timestamp unix kepada tarikh adalah kemahiran asas untuk pembangun yang bekerja dengan API, pangkalan data, dan sistem backend. Timestamp Unix hanyalah kiraan saat (atau milisaat) yang berlalu sejak 1 Januari 1970, pada 00:00:00 UTC, titik rujukan yang dikenali sebagai epoch Unix. Panduan ini akan membimbing awak melalui mekanik penukaran datetime, pengendalian zon waktu, dan contoh kod praktikal dalam JavaScript, Python, dan SQL, supaya awak boleh berhenti meneka dan mula menukar dengan yakin.

Perkara Penting:

  • Timestamp Unix mengira saat dari 1 Januari 1970 UTC (epoch 0), menjadikannya neutral zon waktu mengikut reka bentuk.
  • Sentiasa sahkan sama ada timestamp awak dalam saat atau milisaat sebelum menukar, kerana mencampurkannya adalah sumber bug yang paling biasa.
  • Offset zon waktu mesti digunakan secara eksplisit selepas menukar kepada UTC, bukan sebelumnya.
  • JavaScript, Python, dan SQL masing-masing mempunyai fungsi terbina dalam untuk penukaran unix kepada tarikh, tetapi setiap satu mempunyai keanehannya sendiri yang perlu diperhatikan.

Apakah Timestamp Unix?

Timestamp Unix mewakili satu momen yang tidak meragukan dalam masa sebagai integer. Jam mula berdetik pada 1 Januari 1970, pada 00:00:00 UTC, momen yang dipanggil "epoch 0." Setiap saat yang telah berlalu sejak itu menambah satu kepada counter. Kesederhanaan itu adalah sebab mengapa ia menjadi format masa universal untuk sistem pengkomputeran.

Tiada bulan, tiada tahun lompat, tiada pelarasan waktu siang dalam nombor itu sendiri. Timestamp sentiasa berdasarkan UTC, yang bermakna nombor yang sama merujuk kepada momen yang sama dalam masa tanpa mengira di mana pelayan atau pengguna berada. Ini adalah kekuatan terbesarnya dan juga sumber kebingungan pembangun tentang pengendalian format masa.

Untuk pandangan yang lebih mendalam tentang bagaimana masa epoch menjadi asas pengkomputeran moden, lihat artikel kami tentang Masa Epoch: Asas Timestamp Unix.

Satu perbezaan penting: tidak semua timestamp Unix mengira dalam saat. Sesetengah sistem, terutamanya persekitaran JavaScript dan banyak REST API, menggunakan milisaat. Timestamp 1717200000 adalah dalam saat; 1717200000000 adalah momen yang sama dalam milisaat. Mencampurkan ini adalah bug tunggal yang paling kerap dalam penukaran datetime. Sebelum awak menulis satu baris kod, sahkan unit yang digunakan oleh sumber awak.

Tidak pasti unit mana yang sistem awak patut gunakan? Lihat Saat vs Milisaat vs Mikrosaat: Timestamp Unix Mana Yang Patut Awak Gunakan? untuk pecahan praktikal.

Diagram menunjukkan timestamp unix mengira saat dari epoch 0 pada 1 Januari 1970 UTC

Pengendalian Zon Waktu dan Bug Offset Biasa

Penukaran zon waktu unix adalah tempat kebanyakan pembangun tersandung. Timestamp itu sendiri sentiasa UTC. Zon waktu hanya penting apabila awak memaparkan atau mentafsir timestamp itu untuk pengguna atau entri log. Memahami perbezaan ini menghalang satu kategori bug.

Asas UTC

RFC 3339 mentakrifkan format standard untuk mewakili datetime UTC dalam teks (2024-06-01T00:00:00Z). Apabila awak menukar timestamp Unix kepada string yang boleh dibaca manusia, awak sedang menggunakan offset zon waktu kepada asas UTC. Offset positif seperti +05:30 (Waktu Standard India) menambah jam dan minit; offset negatif seperti -05:00 (Waktu Standard Timur AS) menolaknya.

Pengesanan Zon Waktu Automatik

Kebanyakan bahasa moden dan pelayar boleh mengesan zon waktu tempatan secara automatik. Dalam JavaScript, Intl.DateTimeFormat().resolvedOptions().timeZone mengembalikan nama zon waktu IANA (contohnya, America/New_York). Dalam Python, modul zoneinfo (Python 3.9+) mengendalikan zon IANA secara natif. Bergantung kepada pengesanan automatik adalah baik untuk tujuan paparan, tetapi jangan bergantung padanya untuk menyimpan atau mengira timestamp.

Bug Offset Biasa

  • Menganggap masa tempatan sebagai UTC: Jika pelayan awak ditetapkan kepada UTC+2 dan awak memanggil datetime.now() tanpa menentukan zon waktu, awak mendapat masa tempatan yang kelihatan seperti UTC tetapi berbeza dua jam.
  • Peralihan Waktu Siang (DST): Offset tetap seperti +01:00 tidak mengambil kira DST. Gunakan zon IANA bernama (Europe/Berlin) daripada offset tetap bila mungkin.
  • Ketidakpadanan milisaat vs saat: Menghantar timestamp milisaat kepada fungsi yang mengharapkan saat menghasilkan tarikh dalam tahun 55000+. Sentiasa periksa magnitud nombor terlebih dahulu.
  • Tetapan zon waktu pangkalan data: MySQL dan PostgreSQL boleh menyimpan dan memaparkan timestamp secara berbeza bergantung pada zon waktu sesi. Simpan timestamp dalam UTC dan tukar di lapisan aplikasi.

Contoh Kod: JavaScript, Python, dan SQL

Snippet berikut merangkumi senario paling biasa untuk penukaran unix kepada tarikh. Setiap contoh menggunakan timestamp konkrit: 1717200000, yang sepadan dengan 1 Jun 2024, 00:00:00 UTC.

JavaScript: Tukar Timestamp Unix

Objek Date JavaScript bekerja dalam milisaat, jadi darabkan timestamp berasaskan saat dengan 1000 terlebih dahulu.

// JavaScript tukar timestamp unix kepada tarikh
const unixSeconds = 1717200000;
const date = new Date(unixSeconds * 1000); // tukar kepada milisaat

// String UTC
console.log(date.toUTCString());
// Output: "Sat, 01 Jun 2024 00:00:00 GMT"

// Paparan zon waktu tempatan (menggunakan zon waktu pelayar/sistem)
console.log(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
// Output: "5/31/2024, 8:00:00 PM"

// Format ISO 8601
console.log(date.toISOString());
// Output: "2024-06-01T00:00:00.000Z"

Perhatikan bagaimana timestamp yang sama dipaparkan sebagai 31 Mei di New York kerana tengah malam UTC adalah 8 malam Eastern pada hari sebelumnya. Ini bukan bug; ini adalah tingkah laku penukaran zon waktu unix yang betul.

Python: Timestamp Unix kepada Datetime

Modul datetime Python menyediakan kaedah yang bersih dan eksplisit. Sentiasa gunakan objek datetime yang sedar zon waktu dalam kod pengeluaran.

from datetime import datetime, timezone
from zoneinfo import ZoneInfo  # Python 3.9+

unix_seconds = 1717200000

# Python timestamp unix kepada datetime (UTC)
dt_utc = datetime.fromtimestamp(unix_seconds, tz=timezone.utc)
print(dt_utc)
# Output: 2024-06-01 00:00:00+00:00

# Tukar kepada zon waktu tertentu
dt_tokyo = dt_utc.astimezone(ZoneInfo("Asia/Tokyo"))
print(dt_tokyo)
# Output: 2024-06-01 09:00:00+09:00

# Format sebagai string yang boleh dibaca
print(dt_utc.strftime("%B %d, %Y at %H:%M UTC"))
# Output: June 01, 2024 at 00:00 UTC

Menggunakan datetime.fromtimestamp() tanpa argumen tz mengembalikan datetime naif (tidak sedar zon waktu) dalam masa sistem tempatan, yang boleh menyebabkan bug senyap dalam persekitaran pelayan. Sentiasa hantar tz=timezone.utc sebagai tabiat.

SQL: Epoch kepada Datetime

Kedua-dua PostgreSQL dan MySQL menyokong penukaran epoch kepada datetime secara langsung.

-- PostgreSQL: tukar timestamp unix kepada tarikh
SELECT TO_TIMESTAMP(1717200000) AS converted_date;
-- Output: 2024-06-01 00:00:00+00

-- MySQL: penukaran unix kepada tarikh
SELECT FROM_UNIXTIME(1717200000) AS converted_date;
-- Output: 2024-06-01 00:00:00
-- Nota: FROM_UNIXTIME menggunakan zon waktu sesi. Tetapkan secara eksplisit:
SET time_zone = '+00:00';
SELECT FROM_UNIXTIME(1717200000);

Untuk panduan yang lebih mendalam tentang menyimpan dan menanyakan timestamp dalam pangkalan data, lihat Timestamp Unix dalam Pangkalan Data: Amalan Terbaik untuk Penyimpanan dan Pertanyaan.

Kes Penggunaan Biasa: epoch kepada datetime dalam Sistem Sebenar

Memahami mekanik adalah satu perkara. Melihat bagaimana penukaran epoch kepada datetime berfungsi dalam sistem sebenar membuatnya melekat. Berikut adalah tiga senario konkrit yang diambil daripada corak pembangunan SaaS biasa.

Kajian Kes: Penghuraian REST API, Penyimpanan Pangkalan Data, dan Logging Backend

Bayangkan platform analitik SaaS yang menyerap acara dari REST API pihak ketiga. Setiap respons API termasuk medan seperti "event_time": 1717200000. Berikut adalah bagaimana pasukan mengendalikannya di setiap lapisan:

1. Penghuraian REST API
Perkhidmatan backend menerima payload JSON dan segera mengesahkan unit timestamp. Kerana nilainya adalah 10 digit panjang, pasukan mengesahkan ia dalam saat (13 digit akan menunjukkan milisaat). Perkhidmatan Python menukarnya kepada objek datetime yang sedar UTC sebelum sebarang pemprosesan selanjutnya. Ini memastikan bahawa fungsi hiliran tidak pernah menerima integer mentah secara tidak sengaja.

2. Penyimpanan Pangkalan Data
Platform menyimpan nilai dalam lajur PostgreSQL yang ditaip sebagai TIMESTAMPTZ (timestamp dengan zon waktu). Aplikasi sentiasa memasukkan dalam UTC menggunakan TO_TIMESTAMP(1717200000). Menyimpan dalam UTC bermakna apabila syarikat berkembang untuk melayani pengguna di berbilang wilayah, tiada migrasi data diperlukan. Pertanyaan sentiasa menapis dalam UTC dan menukar kepada masa tempatan hanya dalam lapisan persembahan.

3. Logging Backend
Saluran logging melampirkan string UTC ISO 8601 (2024-06-01T00:00:00Z) kepada setiap entri log bersama timestamp Unix mentah. Pendekatan dwi ini bermakna jurutera boleh membaca log secara langsung tanpa alat penukaran, manakala sistem pemantauan automatik masih boleh melakukan aritmetik tepat pada nilai integer. Apabila laporan bug mengatakan "ralat berlaku sekitar 9 pagi waktu Tokyo," pasukan menukar itu kepada julat timestamp Unix dan menanyakan log secara langsung.

Corak tiga lapisan ini (hurai, simpan dalam UTC, papar tempatan) adalah cara paling bersih untuk mengendalikan penukaran datetime dalam mana-mana sistem pengeluaran.

Tip Pantas: Jika awak bekerja dengan bot Discord atau pelayan komuniti, timestamp Unix juga menjana format timestamp natif Discord. Pelajari caranya dalam panduan kami tentang Bagaimana Timestamp Discord Berfungsi dan Cara Menggunakannya dalam Pelayan Awak.

Kesimpulan

Menukar timestamp Unix kepada tarikh yang boleh dibaca adalah mudah sebaik sahaja awak memahami tiga peraturan: timestamp sentiasa UTC, unit adalah sama ada saat atau milisaat (sahkan sebelum menukar), dan offset zon waktu digunakan pada masa paparan, bukan masa penyimpanan. Sama ada awak menulis JavaScript, Python, atau SQL, alat terbina dalam adalah boleh dipercayai selagi awak menggunakannya dengan argumen zon waktu yang eksplisit. Gunakan corak tiga lapisan dari kajian kes di atas (hurai, simpan dalam UTC, papar tempatan) dan awak akan mengelakkan perangkap paling biasa dalam penukaran datetime merentasi mana-mana sistem SaaS.

Alat penukar timestamp unix kepada tarikh di unixtimestamp.app

Tukar Mana-mana Timestamp Unix Dengan Serta-merta

Tampal mana-mana timestamp dan dapatkan tarikh UTC tepat, masa tempatan, dan pecahan zon waktu dalam satu klik. Tiada persediaan, tiada pendaftaran diperlukan.

Cuba Penukar Percuma di unixtimestamp.app →

Timestamp berasaskan saat adalah nombor 10 digit (untuk tarikh sekitar 2026), manakala timestamp berasaskan milisaat adalah 13 digit. Objek Date JavaScript menggunakan milisaat secara natif. Untuk menukar timestamp saat dalam JavaScript, darab dengan 1000 sebelum menghantar kepada new Date(). Mencampurkan kedua-dua unit adalah punca paling biasa tarikh yang sangat salah.

Ini adalah tingkah laku yang dijangka, bukan bug. Timestamp Unix mewakili momen UTC. Jika tengah malam UTC jatuh pada hari kalendar sebelumnya untuk zon waktu awak (contohnya, UTC 00:00 adalah 8 malam Eastern pada hari sebelumnya), tarikh yang dipaparkan akan berbeza. Sentiasa tentukan zon waktu sasaran secara eksplisit semasa memformat untuk paparan.

Gunakan datetime.fromtimestamp(ts, tz=timezone.utc) dari modul datetime. Ini mengembalikan objek datetime UTC yang sedar zon waktu. Elakkan memanggil datetime.fromtimestamp() tanpa argumen tz, kerana ia menggunakan zon waktu sistem tempatan dan mencipta datetime naif yang boleh menyebabkan ralat senyap dalam persekitaran pelayan.

Simpan timestamp sebagai TIMESTAMPTZ (PostgreSQL) atau sebagai integer UTC. Elakkan menyimpan string berformat seperti "1 Jun 2024" kerana ia lebih sukar untuk ditanyakan, diisih, dan dibandingkan. Tukar kepada format yang boleh dibaca manusia hanya di lapisan aplikasi atau persembahan, mengekalkan pangkalan data awak neutral zon waktu dan mudah alih.

Epoch Unix 1 Januari 1970 dipilih oleh pembangun Unix awal sebagai titik rujukan yang mudah dan terkini. Ia bukan keperluan teknikal tetapi keputusan praktikal yang dibuat pada awal 1970-an apabila Unix sedang dibangunkan di Bell Labs. Tarikh itu telah menjadi standard universal untuk pengukuran masa komputer.