Epoch Time (Unix Time) Là Gì?
Epoch time, còn gọi là Unix time hay Unix timestamp, là số giây đã trôi qua kể từ 00:00:00 UTC ngày 1/1/1970, thời điểm được gọi là Unix epoch (kỷ nguyên Unix). Ví dụ, 1700000000 là 22:13:20 UTC ngày 14/11/2023.
Máy tính lưu thời gian theo cách này vì một con số duy nhất dễ so sánh, sắp xếp và gửi giữa các hệ thống, đồng thời biểu thị cùng một thời điểm ở mọi nơi trên thế giới. Múi giờ chỉ xuất hiện khi bạn chuyển nó thành ngày giờ cho người đọc. Unix time bỏ qua giây nhuận: mỗi ngày được tính đúng 86.400 giây.

Giây, Mili Giây, Micro Giây Hay Nano Giây?
Timestamp có nhiều độ chính xác khác nhau. Công cụ nhận diện đơn vị dựa trên số chữ số, và bạn có thể tự chọn lại bằng menu đơn vị:
Unix timestamp cổ điển, được dùng bởi Linux, PHP, time.time() của Python (dạng số thực), claim exp của JWT và hầu hết API. Ví dụ: 1700000000.
Được dùng bởi JavaScript (Date.now()), Java cùng nhiều cơ sở dữ liệu và log. Ví dụ: 1700000000000.
Được dùng bởi UnixMicro() của Go cùng nhiều log và trace có độ phân giải cao. Ví dụ: 1700000000000000.
Được dùng bởi UnixNano() của Go, InfluxDB và các hệ thống giám sát. Ví dụ: 1700000000000000000.
Advertisement
Cách Chuyển Unix Timestamp Sang Ngày
Nhập nó vào tab Timestamp sang ngày. Dấu phẩy, dấu cách và phần thập phân (như 1700000000.5) đều được chấp nhận, còn giá trị âm cho ra các ngày trước năm 1970.
Nhãn hiển thị cho biết số đã được đọc là giây, mili giây, micro giây hay nano giây. Hãy tự chọn đơn vị nếu công cụ đoán sai.
Bạn nhận được ngày giờ theo UTC và theo múi giờ của bạn, dạng ISO 8601, RFC 2822, khoảng thời gian đã trôi qua, cùng thời điểm đó ở cả bốn đơn vị.
Chọn bất kỳ múi giờ nào trong danh sách để xem cùng thời điểm đó ở nơi khác, ví dụ để kiểm tra một mục log xảy ra lúc mấy giờ theo giờ của đồng nghiệp ở nước ngoài.
Cách Chuyển Ngày Sang Unix Timestamp
Mở tab Ngày sang timestamp, chọn ngày giờ và chọn múi giờ tương ứng. Bạn nhận được epoch time tính bằng giây và mili giây, cùng dạng ISO 8601 theo UTC.
Cùng bảng đó còn hiển thị giây đầu tiên và giây cuối cùng của ngày, tháng và năm đó trong múi giờ đã chọn. Điều này rất tiện cho các truy vấn cơ sở dữ liệu như "tất cả đơn hàng đặt trong tháng 10 theo giờ New York", khi bạn cần timestamp bắt đầu và kết thúc của khoảng thời gian.
Advertisement
Múi Giờ và Giờ Mùa Hè
Unix timestamp không có múi giờ: nó luôn được tính từ nửa đêm UTC ngày 1/1/1970. Cùng một timestamp chỉ đơn giản được hiển thị thành các giờ khác nhau ở những nơi khác nhau, chẳng hạn 1700000000 là 22:13 ở London và 03:43 sáng hôm sau ở Ấn Độ.
Múi giờ thực sự quan trọng khi chuyển ngày giờ thành timestamp. Có những giờ xảy ra hai lần khi đồng hồ lùi lại, và có những giờ không tồn tại khi đồng hồ tiến lên. Vào đêm đồng hồ ở Mỹ nhảy tới, 02:30 ở New York không tồn tại. Công cụ này xử lý cả hai trường hợp giống như Python: giờ không tồn tại được dời về sau đúng bằng khoảng nhảy, còn giờ xảy ra hai lần sẽ dùng lần xuất hiện đầu tiên.
Sự Cố Năm 2038
Các hệ thống cũ lưu Unix time trong một số nguyên 32 bit có dấu, với giá trị tối đa là 2147483647: 03:14:07 UTC ngày 19/1/2038. Một giây sau, con số bị tràn thành giá trị âm và các hệ thống đó đọc ngày thành 13/12/1901.
Hầu hết hệ điều hành và ngôn ngữ hiện đại dùng thời gian 64 bit nên không bị ảnh hưởng, nhưng thiết bị nhúng, định dạng tệp cũ, một số code cũ và kiểu cột TIMESTAMP của MySQL (kết thúc ở 2038-01-19 03:14:07 UTC) thì vẫn bị. Công cụ hiển thị cảnh báo cho mọi timestamp nằm ngoài phạm vi 32 bit, để bạn phát hiện các giá trị có thể làm hỏng phần mềm cũ.
Advertisement
Lấy Epoch Time Hiện Tại Trong Code
Mọi ngôn ngữ lập trình và shell đều đọc và chuyển đổi được Unix time:
Math.floor(Date.now() / 1000) // giây
Date.now() // mili giây
new Date(1700000000 * 1000).toISOString() // '2023-11-14T22:13:20.000Z'import time, datetime
int(time.time()) # giây
datetime.datetime.fromtimestamp(1700000000, datetime.timezone.utc)
# 2023-11-14 22:13:20+00:00date +%s # epoch hiện tại tính bằng giây
date -u -d @1700000000 # Linux (GNU date)
date -u -r 1700000000 # macOS (BSD date)-- PostgreSQL
SELECT extract(epoch FROM now());
SELECT to_timestamp(1700000000);
-- MySQL
SELECT UNIX_TIMESTAMP();
SELECT FROM_UNIXTIME(1700000000);time(); // PHP
date('c', 1700000000);
time.Now().Unix() // Go
Instant.now().getEpochSecond() // Java=(A1/86400)+DATE(1970,1,1) // epoch (giây) ở A1 sang ngày UTC
=(B1-DATE(1970,1,1))*86400 // ngày UTC ở B1 sang epoch (giây)Các Unix Timestamp Đáng Chú Ý
0: ngày 1/1/1970, 00:00:00 UTC, chính là Unix epoch.1000000000: ngày 9/9/2001, 01:46:40 UTC, timestamp 10 chữ số đầu tiên.1234567890: ngày 13/2/2009, 23:31:30 UTC.1700000000: ngày 14/11/2023, 22:13:20 UTC.1800000000: ngày 15/1/2027, 08:00:00 UTC.2000000000: ngày 18/5/2033, 03:33:20 UTC.2147483647: ngày 19/1/2038, 03:14:07 UTC, giới hạn 32 bit.4294967295: ngày 7/2/2106, 06:28:15 UTC, giới hạn 32 bit không dấu.
Advertisement
Thêm Công Cụ Cho Lập Trình Viên
Các công cụ miễn phí khác dành cho lập trình viên và quản trị hệ thống, tất cả đều chạy trong trình duyệt của bạn: