Epoch second: vì sao mốc thời gian lại bắt đầu từ năm 1970?
1) Nguồn gốc của mốc 1970
Khoảng 1969-1970, đội ngũ tại Bell Labs xây dựng Unix. Khi thiết kế hệ thống thời gian, họ cần một mốc chuẩn để:
- lưu trữ metadata thời gian trong file system
- so sánh thời điểm trước/sau
- cộng trừ thời gian một cách nhất quán
Mốc được chọn là:
1970-01-01 00:00:00 UTC
Và từ đó:
Unix time = số giây kể từ mốc 1970-01-01 00:00:00 UTC
2) Vì sao lại chọn 1970?
Không có lý do “thiêng liêng”. Chủ yếu là quyết định kỹ thuật thực dụng tại thời điểm đó.
a) Unix được viết đúng giai đoạn 1969-1970
Chọn đầu năm 1970 là hợp logic theo timeline phát triển hệ điều hành.
b) Dễ tính toán hơn định dạng lịch thông thường
Thay vì xử lý trực tiếp một chuỗi thời gian phức tạp như:
2026-03-04 14:22:18
hệ thống chỉ cần một số nguyên:
1741098138
Nhờ vậy rất dễ:
- so sánh (
>,<) - cộng/trừ khoảng thời gian
- lưu vào database và index
c) Tách biệt timezone khỏi lưu trữ
Unix time luôn tính theo:
UTC
Timezone chỉ dùng ở lớp hiển thị (UI, log formatter, report). Cách tách này giúp giảm lỗi khi hệ thống chạy đa vùng.
3) Ví dụ trực quan
1970-01-01 00:00:00 UTC -> 0
1970-01-01 00:00:01 UTC -> 1
1970-01-01 00:01:00 UTC -> 60
Tới năm 2026, epoch second nằm quanh:
~ 1,740,000,000
4) Epoch second trong Java
Java có hai cách phổ biến:
long millis = System.currentTimeMillis(); // milliseconds since Unix epoch
long seconds = millis / 1000; // epoch second
Với Java time API hiện đại:
import java.time.Instant;
long epochSecond = Instant.now().getEpochSecond();
Nếu chỉ cần độ chính xác theo giây để bucket, rate limit hoặc key thời gian, epochSecond thường đủ và gọn.
5) Fun fact quan trọng: Year 2038 problem
Nhiều hệ thống cũ dùng Unix time bằng signed 32-bit integer. Giá trị tối đa là:
2,147,483,647
Tương ứng thời điểm:
2038-01-19 03:14:07 UTC
Sau đó sẽ overflow nếu vẫn giữ 32-bit.
Đa số hệ thống hiện đại đã chuyển sang 64-bit, nhưng các hệ thống embedded/legacy vẫn cần kiểm tra kỹ.
6) Tóm tắt ngắn
- Epoch = mốc thời gian chuẩn
- Unix chọn mốc
1970-01-01 00:00:00 UTC - Epoch second = số giây kể từ mốc đó
- Lợi ích chính: đơn giản cho tính toán, lưu trữ, so sánh, và xử lý phân tán