UNIX time là gì?
UNIX time (còn gọi là UNIX timestamp hay POSIX time) là số giây đã trôi qua kể từ mốc UNIX epoch, tức 01/01/1970 00:00:00 UTC. Đây là cách biểu diễn một thời điểm bằng một số nguyên duy nhất, mang tính toàn cầu và không phụ thuộc vào ngôn ngữ lập trình. Nhờ vậy, nó được dùng rộng rãi trong tin học cho việc ghi log, lưu cơ sở dữ liệu, gọi API và lập trình. UNIX time không tính giây nhuận — mỗi ngày luôn được coi là đúng 86.400 giây.
Cách sử dụng công cụ
Nhập ngày tháng (năm, tháng, ngày) và thời gian (giờ, phút, giây) đúng như đồng hồ hiển thị ở giờ địa phương. Sau đó đặt giá trị "Chênh lệch giờ so với UTC" theo độ lệch múi giờ của thời gian địa phương đó, tính bằng giờ. Ví dụ: Nhật Bản là +9, Ấn Độ là +5,5, còn giờ chuẩn Thái Bình Dương của Mỹ là -8. Riêng Việt Nam là +7. Giá trị mặc định là +9 (giờ Nhật Bản). Để trống giờ, phút, giây nếu muốn coi chúng bằng 0.
Giải thích công thức
Trước tiên, ngày tháng được chuyển thành số ngày bằng thuật toán days-from-civil (của Howard Hinnant). Thuật toán này đếm chính xác số ngày kể từ mốc epoch cho mọi ngày theo lịch Gregory, kể cả năm nhuận và những ngày trước năm 1970. Số ngày đó được nhân với 86.400, rồi cộng thêm giờ, phút, giây để ra số giây kể từ 01/01/1970 00:00:00 theo giờ địa phương. Cuối cùng, trừ đi độ lệch UTC (số giờ × 3600) để quy kết quả về giờ UTC.
$$ t = 86400 \cdot D + 3600\,\text{Hour} + 60\,\text{Minute} + \text{Second} - 3600\,\text{UTC Offset} $$ $$ \text{where}\quad \left\{ \begin{aligned} D &= \text{days from } 1970\text{-}01\text{-}01 \text{ to the chosen date} \\ \text{date} &= \left(\text{Year},\ \text{Month},\ \text{Day}\right) \end{aligned} \right. $$
Ví dụ minh họa
Với 15/06/2025 00:00:00 ở độ lệch +9: daysSinceEpoch = 20254, do đó localSeconds = \(20254 \times 86400 = 1{.}749{.}945{.}600\). Trừ đi \(9 \times 3600 = 32{.}400\) ta được UNIX time là 1.749.913.200, tương ứng với 14/06/2025 15:00:00 UTC.
Câu hỏi thường gặp
Tại sao timestamp lại nhỏ hơn tôi nghĩ khi độ lệch là số dương? Vì một thời điểm địa phương đi trước UTC tương ứng với một thời điểm UTC sớm hơn, nên giá trị UNIX của nó thấp hơn so với khi đọc cùng giờ đồng hồ đó theo UTC.
Công cụ có xử lý được các ngày trước năm 1970 không? Có — khi đó kết quả đơn giản là một số âm. Ví dụ 31/12/1969 23:59:59 UTC là -1.
Có tính giây nhuận không? Không. Công cụ tuân theo định nghĩa POSIX chuẩn, trong đó mỗi ngày luôn đúng 86.400 giây.