Tất cả bài viết

Thời gian Unix: vì sao máy tính đếm thời gian từ năm 1970

Thời gian Unix (Unix timestamp) là số giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970, 00:00:00 UTC. Ngày này được gọi là "kỷ nguyên Unix", và đó là mốc tham chiếu mà hầu như mọi hệ điều hành, cơ sở dữ liệu và ngôn ngữ lập trình hiện đại dùng để đếm thời gian.

Vì sao lại là năm 1970

Ngày này không được chọn vì một sự kiện đặc biệt nào, mà hoàn toàn vì tính thực tiễn: các nhà phát triển Unix tại Bell Labs vào đầu những năm 1970 đơn giản chỉ lấy năm hiện tại lúc đó làm mốc khởi đầu tròn trịa, tiện lợi. Không có ý nghĩa sâu xa nào đằng sau ngày này.

Vì sao định dạng này phổ biến trong các nhà máy sản xuất và thiết bị nhúng

Trong lĩnh vực sản xuất và gia công thiết bị điện tử xuất khẩu — một ngành đang phát triển mạnh tại Việt Nam — dữ liệu cảm biến và log sự kiện trên dây chuyền thường được ghi bằng timestamp Unix, vì nó cho phép so sánh và sắp xếp sự kiện giữa các nhà máy ở nhiều múi giờ khác nhau mà không cần chuyển đổi thủ công.

Vấn đề năm 2038

Nhiều hệ thống cũ lưu thời gian Unix dưới dạng số nguyên có dấu 32 bit, chỉ có thể biểu diễn giá trị đến ngày 19 tháng 1 năm 2038. Sau ngày đó, số này sẽ bị tràn — đây không chỉ là vấn đề lý thuyết, vì nhiều thiết bị nhúng và máy móc công nghiệp đời cũ vẫn hoạt động hàng chục năm mà không được cập nhật firmware.

Vì sao cần điều này

  • Chuyển đổi timestamp từ log hoặc phản hồi API thành ngày giờ dễ hiểu.
  • Tính khoảng cách giữa hai thời điểm mà không cần tính toán lịch thủ công.
  • Chẩn đoán các vấn đề liên quan đến múi giờ khi làm việc với timestamp.

Thời gian Unix và giây nhuận

Thời gian Unix giả định mỗi ngày luôn có đúng 86400 giây, bỏ qua các giây nhuận thỉnh thoảng được thêm vào UTC để bù cho việc Trái Đất quay chậm lại. Điều này có nghĩa là về mặt kỹ thuật, thời gian Unix không phải là biểu diễn chính xác của UTC vào những thời điểm thêm giây nhuận — hầu hết hệ thống chỉ đơn giản "kéo giãn" hoặc lặp lại một giây để tránh bước nhảy trong bộ đếm.

Dùng thử công cụ