Dấu thời gian Unix Là Gì? Giải thích Đầy đủ về Epoch Time
Trả lời nhanh
Unix timestamp là số giây từ 1 tháng 1 1970, 00:00:00 UTC (Unix epoch). Timezone-independent và dễ so sánh. JavaScript dùng mili-giây (13 chữ số); Unix và hầu hết API dùng giây (10 chữ số). Dùng Timestamp Converter miễn phí.
Giới thiệu
Unix timestamp (còn gọi Unix epoch time, POSIX time hoặc Unix time) là số giây từ 1 tháng 1 1970, 00:00:00 UTC —một khoảnh khắc gọi Unix epoch. Timestamp được dùng phổ biến trong hệ điều hành, cơ sở dữ liệu, log và API vì timezone-independent (luôn UTC), dễ so sánh và compact. Tuy nhiên không đọc được —1693526400 vô nghĩa không có chuyển đổi.
Từng bước một
-
Hiểu về kỷ nguyên Unix
Kỷ nguyên Unix là ngày 1 tháng 1 năm 1970, 00:00:00 Giờ phối hợp quốc tế (UTC). Dấu thời gian Unix là số giây kể từ thời điểm này. Dấu thời gian dương là sau kỷ nguyên; dấu thời gian âm (được một số hệ thống hỗ trợ) có trước nó.
-
Phân biệt giây với mili giây
Dấu thời gian Unix thường tính bằng giây (10 chữ số tính đến năm 2026, ví dụ: 1693526400). Date.now() và Date.getTime() của JavaScript trả về mili giây (13 chữ số, ví dụ: 1693526400000). Luôn kiểm tra xem API mong đợi đơn vị nào — trộn chúng là lỗi dấu thời gian phổ biến nhất.
-
Hiểu tính độc lập của múi giờ
Dấu thời gian Unix luôn là UTC. Chúng không phụ thuộc vào múi giờ của người dùng. Để hiển thị dấu thời gian theo múi giờ cụ thể, hãy chuyển đổi dấu thời gian đó thành ngày và áp dụng chênh lệch múi giờ. Điều này làm cho dấu thời gian trở nên lý tưởng cho việc lưu trữ và so sánh.
-
Tìm hiểu về bài toán Năm 2038
Các hệ thống sử dụng số nguyên có dấu 32 bit cho dấu thời gian sẽ tràn vào ngày 19 tháng 1 năm 2038, 03:14:07 UTC — 'sự cố Y2038'. Các hệ thống sử dụng số nguyên 64 bit hoặc số JavaScript (số float 64 bit) không bị ảnh hưởng. Các hệ thống hiện đại phần lớn đều an toàn với Y2038, nhưng các hệ thống nhúng cũ có thể không an toàn.
Ví dụ
Dấu thời gian cho một ngày đã biết
đầu vào: 2023-09-01 00:00:00 UTC
đầu ra: 1693526400 (giây) hoặc 1693526400000 (mili giây)
Kỷ nguyên Unix
đầu vào: 1970-01-01 00:00:00 UTC
đầu ra: 0
Ranh giới vấn đề Y2038
đầu vào: 2038-01-19 03:14:07 UTC
đầu ra: 2147483647 (số nguyên có dấu tối đa 32 bit)
Các vấn đề thường gặp
- Trộn giây và mili giây —JavaScript sử dụng mili giây (Date.now()), Unix và hầu hết APIs sử dụng giây. Chia cho 1000 để chuyển đổi ms thành giây; nhân với 1000 để có kết quả ngược lại.
- Nhầm lẫn múi giờ —dấu thời gian là UTC. Khi hiển thị, hãy chuyển đổi sang múi giờ địa phương của người dùng hoặc chỉ định UTC. Không áp dụng offset cho dấu thời gian thô.
- Sự cố năm 2038 — tràn dấu thời gian số nguyên có dấu 32 bit vào ngày 19 tháng 1 năm 2038. Sử dụng số nguyên 64 bit hoặc số JavaScript để tránh điều này.
- Dấu thời gian âm —ngày trước ngày 01-01-1970 có dấu thời gian âm. Một số hệ thống không hỗ trợ chúng.
Mẹo
- Luôn kiểm tra xem API mong đợi giây hay mili giây —đây là lỗi dấu thời gian phổ biến nhất.
- Sử dụng chuỗi ISO 8601 (ví dụ: "2023-09-01T00:00:00Z") cho dấu thời gian mà con người có thể đọc được trong APIs; sử dụng kỷ nguyên Unix để lưu trữ và tính toán.
- JavaScript Date.now() trả về mili giây; chia cho 1000 và sàn để lấy giây.
- Sử dụng Trình chuyển đổi dấu thời gian của chúng tôi để chuyển đổi giữa dấu thời gian và ngày mà con người có thể đọc được trong trình duyệt của bạn.