Apakah Itu Unix Timestamp (Dan Mengapa Pembangun Menggunakannya)?

Unix timestamp ialah satu integer: bilangan saat yang telah berlalu sejak 1 Januari 1970, 00:00:00 UTC. Detik itu dipanggil Unix epoch, dan setiap saat selepasnya dikira tanpa henti.

Unix timestamp semasa sekarang biasanya berada sekitar 1,750,000,000. Nombor itu sahaja sudah cukup untuk memberitahu komputer, pangkalan data, atau API detik masa yang tepat — tanpa kekaburan.

Mengapa 1970?

Unix dibangunkan pada lewat 1960-an di Bell Labs. Apabila jurutera memerlukan titik rujukan masa yang tetap, mereka memilih 1 Januari 1970 — permulaan dekad baharu, mudah difahami, dan berada cukup dekat pada masa itu supaya tarikh yang disimpan tidak memerlukan nombor negatif untuk kebanyakan kegunaan praktikal.

Ia pilihan pragmatik, bukan pilihan berprinsip. Tetapi ia kekal digunakan.

Masalah yang Diselesaikan oleh Unix Timestamp

Mewakili tarikh sebagai rentetan yang boleh dibaca manusia mencipta kekaburan di banyak peringkat:

  • Perbezaan format: 03/04/25 itu 3 April atau 4 Mac? 1925 atau 2025?
  • Kekeliruan zon waktu: “3 petang Jumaat” bermaksud detik yang berbeza di London berbanding Tokyo
  • Perbezaan lokal: Ada negara guna hari-bulan-tahun, ada guna bulan-hari-tahun

Unix timestamp mengelakkan semua ini. 1711929600 ialah satu detik masa yang tidak ambigu tanpa mengira lokasi atau format pilihan. Mesin bersetuju; manusia boleh menukarnya.

Saat, Milisaat, dan Mikrosa at

Unix timestamp asal adalah dalam saat. Tetapi sistem berbeza menggunakan resolusi berbeza:

FormatUnitContoh
Unix (POSIX)Saat1711929600
JavaScript Date.now()Milisaat1711929600000
Python time.time()Saat (float)1711929600.123
Timestamp pangkalan dataSelalunya mikrosa at1711929600000000

Ini antara punca bug yang paling biasa apabila bekerja merentas sistem. Timestamp JavaScript yang terus dihantar ke fungsi Python atau Go akan menjadi 1,000× lebih besar. Sentiasa semak resolusi apabila merentas sempadan sistem.

Membaca dan Menulis Unix Timestamp

Dalam JavaScript / TypeScript

// Current timestamp in seconds
Math.floor(Date.now() / 1000)

// Current timestamp in milliseconds
Date.now()

// Convert timestamp (seconds) to Date object
new Date(timestamp * 1000)

// Convert Date to timestamp (seconds)
Math.floor(new Date('2024-04-01').getTime() / 1000)

Dalam Python

import time, datetime

# Current timestamp (float)
time.time()

# Convert to datetime
datetime.datetime.fromtimestamp(1711929600)

# Convert datetime to timestamp
datetime.datetime(2024, 4, 1).timestamp()

Dalam SQL (PostgreSQL)

-- Current timestamp
EXTRACT(EPOCH FROM NOW())::int

-- Convert to timestamp
TO_TIMESTAMP(1711929600)

Zon Waktu Tidak Mengubah Timestamp Itu Sendiri

Ini penting dan sering disalahfahami.

Unix timestamp sentiasa mewakili satu detik dalam UTC. Apabila anda memaparkannya, anda menukarnya ke zon waktu tempatan. Apabila anda menyimpannya, anda simpan nilai UTC. Timestamp itu sendiri neutral zon waktu.

Ini bermaksud:

  • Dua pengguna di zon waktu berbeza yang menyimpan “sekarang” akan mendapat timestamp yang sama
  • Apabila dipaparkan, setiap pengguna melihatnya dalam waktu tempatan masing-masing
  • Tiada pelarasan offset diperlukan dalam pangkalan data — hanya di lapisan paparan

Masalah Tahun 2038

Unix timestamp yang disimpan sebagai integer bertanda 32-bit hanya boleh dikira sehingga 2,147,483,647 saat — bersamaan 19 Januari 2038, 03:14:07 UTC. Selepas itu, kaunter 32-bit akan “wrap” kepada nombor negatif yang besar.

Sistem yang masih menyimpan timestamp sebagai integer 32-bit akan bermasalah pada tarikh itu. Kebanyakan sistem moden menggunakan integer 64-bit, yang menolak tarikh limpahan ke tahun 292 bilion — tidak relevan untuk kegunaan praktikal.

Jika anda bekerja dengan sistem terbenam, pangkalan data lama, atau kod C legasi, ada baiknya semak bagaimana timestamp disimpan.

Bila Patut Menggunakan Unix Timestamp

Gunakan Unix timestamp apabila:

  • Menyimpan tarikh dalam pangkalan data dan anda mahukan integer ringkas yang mudah diisih
  • Menghantar tarikh antara sistem atau API
  • Membanding atau mengisih peristiwa mengikut masa
  • Mengira tempoh (tolak dua timestamp sahaja)
  • Bekerja dengan cache atau logik luput (expires_at = now + 3600)

Gunakan rentetan tarikh berformat apabila:

  • Memaparkan tarikh kepada pengguna
  • Log peristiwa yang perlu dibaca manusia
  • Bekerja dalam hamparan atau eksport CSV

Penukaran Pantas

ApaSaat
1 minit60
1 jam3,600
1 hari86,400
1 minggu604,800
30 hari2,592,000
1 tahun (anggaran)31,536,000

Unix Timestamp Converter menukarkan mana-mana timestamp kepada tarikh yang boleh dibaca atau menukarkan tarikh kepada Unix timestamp dengan serta-merta.

Artikel berkaitan