Masa Epoch: Asas Timestamp Unix

Apa Sebenarnya Epoch Time?

Jika awak pernah bekerja dengan tarikh dan masa dalam pengaturcaraan, awak mungkin pernah terjumpa Unix timestamps. Tapi apa sebenarnya benda tu, dan kenapa kita gunakannya?

Unix epoch time (juga dipanggil Unix time, POSIX time, atau ringkasnya "epoch") mewakili satu detik masa sebagai bilangan saat yang telah berlalu sejak 1 Januari 1970, pada tengah malam UTC (Universal Coordinated Time). Detik khusus ini dikenali sebagai "Unix epoch" atau "epoch zero."

Contoh Pantas: Jika Unix timestamp semasa ialah 1728773400, itu bermakna tepat 1,728,773,400 saat telah berlalu sejak detik tengah malam pada 1 Januari 1970.

Kenapa 1 Januari 1970?

Tarikh ini mungkin nampak sewenang-wenangnya, tapi ia dipilih semasa Unix sedang dibangunkan pada awal 1970-an di Bell Labs. Para pembangun memerlukan titik permulaan yang konsisten untuk sistem penjejakan masa mereka, dan 1 Januari 1970, adalah hampir dengan masa mereka sedang bekerja pada projek tersebut. Ia telah menjadi standard universal sejak itu.

Memahami Format

Unix timestamps datang dalam format berbeza bergantung pada ketepatan yang diperlukan:

  • Saat (10 digit): Format standard, seperti 1728773400
  • Milisaat (13 digit): Untuk ketepatan lebih, seperti 1728773400000
  • Mikrosaat (16 digit): Untuk masa ultra tepat, seperti 1728773400000000

Selang Masa Biasa dalam Saat

Memahami selang biasa ini boleh membantu awak bekerja dengan timestamps dengan lebih intuitif:

Tempoh Masa Saat Pengiraan Pantas
1 Jam 3,600 60 × 60
1 Hari 86,400 24 × 3,600
1 Minggu 604,800 7 × 86,400
1 Bulan (purata) 2,629,743 30.44 × 86,400
1 Tahun (purata) 31,556,926 365.24 × 86,400

Masalah Tahun 2038 (Y2038)

Ini penting: banyak sistem menyimpan Unix timestamps sebagai 32-bit signed integer. Ini mewujudkan masalah yang serupa dengan bug Y2K.

32-bit signed integer hanya boleh mengira sehingga 2,147,483,647 saat. Apabila kita mencapai 19 Januari 2038, pada 03:14:07 UTC, pengira ini akan overflow dan bertukar kepada nombor negatif, yang berpotensi menyebabkan kegagalan sistem dan bug.

Penting: Sistem moden sedang beralih kepada timestamps 64-bit, yang tidak akan overflow untuk 292 bilion tahun lagi. Pastikan aplikasi awak menggunakan integer 64-bit untuk penyimpanan timestamp!

Mendapatkan Epoch Time Semasa

Setiap bahasa pengaturcaraan mempunyai cara tersendiri untuk mendapatkan Unix timestamp semasa. Berikut adalah kaedah yang paling biasa:

Pembangunan Web

JavaScript

// Dapatkan timestamp dalam milisaat, bahagi dengan 1000 untuk saat
const timestamp = Math.floor(Date.now() / 1000);

// Kaedah alternatif
const timestamp = Math.floor(new Date().getTime() / 1000);

PHP

// Mudah dan terus
$timestamp = time();

// Menggunakan DateTime (lebih fleksibel)
$timestamp = (new DateTime())->getTimestamp();

Bahasa Backend

Python

import time

# Dapatkan timestamp semasa
timestamp = int(time.time())

# Menggunakan modul datetime
from datetime import datetime
timestamp = int(datetime.now().timestamp())

Java

// Mengembalikan milisaat, bahagi dengan 1000 untuk saat
long timestamp = System.currentTimeMillis() / 1000;

// Menggunakan Instant (Java 8+)
long timestamp = Instant.now().getEpochSecond();

C#

// .NET Framework 4.6+ / .NET Core
long timestamp = DateTimeOffset.Now.ToUnixTimeSeconds();

// Versi lama
var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;

Ruby

# Dapatkan timestamp semasa
timestamp = Time.now.to_i

# Alternatif
timestamp = Time.new.to_i

Go

import "time"

// Dapatkan Unix timestamp semasa
timestamp := time.Now().Unix()

// Untuk milisaat
milliseconds := time.Now().UnixMilli()

Query Pangkalan Data

MySQL

-- Dapatkan timestamp semasa
SELECT UNIX_TIMESTAMP();

-- Dapatkan timestamp dari tarikh tertentu
SELECT UNIX_TIMESTAMP('2025-10-12 14:30:00');

PostgreSQL

-- Dapatkan timestamp semasa
SELECT EXTRACT(EPOCH FROM NOW());

-- Dari tarikh tertentu
SELECT EXTRACT(EPOCH FROM TIMESTAMP '2025-10-12 14:30:00');

SQLite

-- Dapatkan timestamp semasa
SELECT STRFTIME('%s', 'now');

-- Dari tarikh tertentu
SELECT STRFTIME('%s', '2025-10-12 14:30:00');

Command Line

Unix/Linux Shell

# Dapatkan timestamp semasa
date +%s

# Tukar tarikh tertentu kepada timestamp
date +%s -d "2025-10-12 14:30:00"

# Untuk masa UTC/GMT, guna -ud bukannya -d
date +%s -ud "2025-10-12 14:30:00"

PowerShell

# Dapatkan timestamp semasa
[int][double]::Parse((Get-Date (Get-Date).ToUniversalTime() -UFormat %s))

Menukar DARI Epoch kepada Tarikh Yang Boleh Dibaca

Setelah awak ada Unix timestamp, awak selalunya perlu menukarnya kembali kepada format tarikh yang boleh dibaca:

JavaScript

// Tukar timestamp kepada objek Date
const date = new Date(timestamp * 1000); // Darab dengan 1000 untuk milisaat

// Format ia
console.log(date.toLocaleString()); // Format tempatan
console.log(date.toISOString());    // Format ISO 8601

PHP

// Format timestamp
$date = date('Y-m-d H:i:s', $timestamp);

// Format RFC 2822
$date = date('r', $timestamp);

// Menggunakan DateTime
$date = (new DateTime())->setTimestamp($timestamp)->format('Y-m-d H:i:s');

Python

from datetime import datetime

# Tukar kepada objek datetime
dt = datetime.fromtimestamp(timestamp)

# Format ia
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')

# Untuk UTC
dt_utc = datetime.utcfromtimestamp(timestamp)

MySQL

-- Tukar timestamp kepada datetime
SELECT FROM_UNIXTIME(1728773400);

-- Dengan format custom
SELECT FROM_UNIXTIME(1728773400, '%Y-%m-%d %H:%i:%s');

Menukar DARI Tarikh Yang Boleh Dibaca kepada Epoch

Operasi sebaliknya juga sama pentingnya:

JavaScript

// Parse string tarikh kepada timestamp
const timestamp = Math.floor(new Date('2025-10-12 14:30:00').getTime() / 1000);

// Menggunakan Date.parse()
const timestamp = Math.floor(Date.parse('October 12, 2025') / 1000);

PHP

// Parse kebanyakan teks tarikh Inggeris
$timestamp = strtotime('15 November 2025');
$timestamp = strtotime('next Monday');
$timestamp = strtotime('+1 week');

// Menggunakan DateTime
$timestamp = (new DateTime('2025-10-12 14:30:00'))->getTimestamp();

Python

from datetime import datetime
import time

# Parse string tarikh
dt = datetime.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S')
timestamp = int(dt.timestamp())

# Untuk UTC
import calendar
timestamp = calendar.timegm(time.strptime('2025-10-12 14:30:00', '%Y-%m-%d %H:%M:%S'))

Amalan Terbaik

Apabila bekerja dengan Unix timestamps dalam aplikasi awak:

  • Sentiasa guna integer 64-bit untuk mengelakkan masalah Y2038
  • Simpan timestamps dalam UTC dalam pangkalan data awak, tukar kepada masa tempatan hanya untuk paparan
  • Konsisten dengan ketepatan awak (saat vs milisaat) di seluruh aplikasi
  • Dokumentasikan format awak – jelaskan sama ada awak menggunakan saat atau milisaat
  • Pertimbangkan library yang timezone-aware untuk operasi tarikh/masa yang kompleks
  • Jangan sekali-kali simpan masa tempatan sebagai timestamp tanpa maklumat timezone

Kesimpulan

Unix timestamps adalah konsep asas dalam pengaturcaraan yang setiap pembangun perlu fahami. Ia menyediakan cara yang mudah dan universal untuk mewakili masa yang berfungsi merentasi semua sistem dan bahasa pengaturcaraan.

Sama ada awak sedang membina aplikasi web, bekerja dengan pangkalan data, atau hanya perlu menjadualkan tugas, memahami epoch time akan memudahkan hidup awak. Guna alat Unix Timestamp Converter kami untuk menukar dengan pantas antara timestamps dan tarikh yang boleh dibaca!

Cuba sekarang: Pergi ke alat converter kami untuk berlatih bekerja dengan Unix timestamps secara real-time!