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."
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.
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!