4 phút đọcCập nhật

Unix timestamp: giây nhảy, năm 2038, và bẫy múi giờ

Tác giả: Biên tập Safe Local Tools

Một Unix timestamp trông như số nguyên vô hại nhưng gói ba thực tế lộn xộn: lịch dân sự, chính trị múi giờ, và độ rộng từ phần cứng. Lưu “giây kể từ 1970-01-01Z” giúp so sánh và cộng trừ thời lượng—cho đến khi bạn phải hiển thị người, xử lý DST, hoặc gặp cột int32 cũ.

Hướng dẫn này so sánh leap second với thực hành POSIX, năm 2038, skew JWT, float giây/mili giây, và gợi ý dùng Safe Local Tools cục bộ thay vì dán ID sự kiện lên converter lạ.

OG illustration

Unix time mà kỹ sư thường dùng

Thông thường đếm các giây không leap kể từ epoch UTC; thư viện ánh xạ sang trường lịch bằng cơ sở IANA. Wikipedia về Unix time vẫn là bản tóm lịch sử hữu ích song không thay thế tài liệu chuẩn nội bộ.

Leap second và đồng hồ đo trễ

Log tương quan thường chấp nhận epoch nguyên sau khi pipeline chuẩn hoá. Đo độ trễ nên dùng đồng hồ đơn điệu (monotonic) thay vì epoch khi cần tránh giật do admin chỉnh NTP.

Năm 2038 và int32

Cột signed 32-bit tràn quanh 2038-01-19. Giải pháp: int64 hoặc chuỗi ISO 8601 có offset rõ. Firmware và CSDL cũ vẫn cần audit dù dịch vụ Node hiện đại chạy 64-bit.

// Ví dụ phóng đại: số quá lớn cho float64 vẫn hiếm với mili giây đời thường
const ms = Number("2147483647000");
console.log(new Date(ms).toISOString());

Trường exp là số giây so với epoch; container resume làm “bây giờ” nhảy. Vùng dung sai vài chục giây tồn tại vì lý do vận hành. Cookie kết hợp Max-Age và Expires đôi khi bị CDN viết lại—hãy đọc header thực tế trình duyệt nhận.

Múi giờ là chính sách

IANA theo dõi DST; quốc gia đổi luật ngắn hạn. Lưu instant UTC rồi render local ở lớp UI. Lỗi điển hình: lưu thành phần lịch địa phương thiếu offset rồi deserialize trong giờ trùng khi thu lùi—forensic không phân biệt được lần xuất hiện thứ nhất hay thứ hai nếu không có offset.

Nhầm giây và mili giây, float và chuỗi parse tự do

Một hệ thống nhân 1000 nhầm chỗ khiến dashboard lệch mười lần. Ưu tiên ISO8601 zulu cho trao đổi. JSON có thể kết hợp chuỗi thời điểm với trường ttlSeconds để client không đoán—ví dụ payload log chuẩn hoá.

{
  "loggedAt": "2026-05-09T15:30:00.000Z",
  "ttlSeconds": 3600
}

CSDL TIMESTAMP WITHOUT TIME ZONE

Kiểu “không TZ” trong SQL hay gây ảo giác bạn đang lưu giờ địa phương trong khi engine cast theo session. Quy tắc vàng dữ liệu audit: UTC rõ ràng ở lớp lưu, localization chỉ ở presentation. ORM mặc định naive datetime là nguồn bug dai dẳng.

Chuẩn hoá ingestion: pipeline log, Prometheus và chỉ báo SLA

Elasticsearch và các nền chỉ mục tương tự không cần trường epoch_second không rõ semantics; các team hay kẹt trong việc lưu cả millis string và millis long—ghi rõ trong schema ingestion để không ai double-scale khi Grafana query downstream.

Với chỉ báo SLA dạng rolling window hai mươi tám ngày, một lần quản trị chỉnh NTP không đều trong cluster có thể tạo răng cưa không thực trong biểu đồ—even khi sự cố kinh doanh không tồn tại.

Đôi khi dữ liệu gắn với hai loại đồng hồ: event_time từ cảm biến gắn thiết bị có epoch riêng (GPS, CAN bus) và ingest_time trên Kafka; khi không ghi hai cột một cách chủ định, không ai giải thích được vì sao biểu đồ chồng sai.

Tương tác frontend: Date.parse, Intl và phép so sánh thời lượng

Trình duyệt không phải lúc nào đồng ý trong việc parse chuỗi locale-specific; chỉ các chuỗi ISO được phép vào các API công ty giúp bạn không săn các bug chỉ tái hiện trên Firefox hoặc trên các bản vá Android cũ.

Đừng chia cho một nghìn hay nhân sai khi các thư viện chart yêu cầu microseconds; các phép float64 trên các giá trị siêu nhỏ thường không gây hại đời JavaScript nhưng lại có thể lệch các thuật toán sort các hệ C++ được bind qua WebAssembly trong dashboard nội bộ.

Safe Local Tools hữu ích khi một ticket yêu cầu chứng minh “15:07Z” không phải “15:07 tại chỗ không rõ”: bạn dán các epoch không chắc chắn và tái chứng minh không gửi các log chứa toàn cụ từ mạng nội bộ lên dịch vụ lịch công cộng.

Epoch là công cụ tuyệt vời nếu bạn không yêu cầu nó làm điều nó không thể—“cùng giờ địa phương tháng sau” là phép lịch chứ không phải phép cộng giây cố định. Safe Local Tools giúp bạn chứng minh mối tương quan trong tab khi bạn chỉ được phép không paste log lên SaaS.