Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix
Giây hay mili giây? Kể một kỷ nguyên 10 chữ số từ một kỷ nguyên 13 chữ số
· Cách thức hoạt động
dấu thời gian unix-time developer-workflow
Hầu hết các giá trị kỷ nguyên mà bạn gặp ngày nay đều có mười chữ số (giây) hoặc mười ba chữ số (mili giây) và việc đoán sai sẽ đưa ra ngày cách xa hàng chục nghìn năm. Bài đăng này giải thích số học đằng sau việc đếm chữ số và lý do tại sao trình chuyển đổi phải nêu đơn vị thay vì suy ra nó.
1700000000 hay 1700000000000? — cùng một nội dung được viết theo hai cách và bảng điều khiển hiển thị một ngày trong tương lai xa
Giá trị nhật ký 1700000000 và giá trị tải trọng 1700000000000 có thể mô tả cùng một thời điểm. Hãy coi giá trị đầu tiên là mili giây và trang tổng quan của bạn rơi vào tháng 1 1970; coi giây phút là giây và ngày tháng của nó sẽ nhảy vọt tới hàng nghìn năm sau trong tương lai. Dấu thời gian chỉ là số đếm cộng với đơn vị và điểm bắt đầu, do đó, cột cơ sở dữ liệu có tên create_at không có tài liệu đã bỏ qua thông tin cần thiết.
Tại sao số giây hiện tại có mười chữ số — giây thứ một tỷ trong 2001, phạm vi mười chữ số chạy đến 2286 và ý nghĩa của chín chữ số
Thời gian Unix đếm số giây đã trôi qua từ 1970-01-01 00:00:00 UTC theo quy ước POSIX thông thường. Bộ đếm đã vượt qua một tỷ trong 2001; đối với ngày dương đương thời, nó thường có mười chữ số thập phân. Nó vẫn giữ nguyên mười chữ số cho đến khi đạt tới mười tỷ vào 2286. Đây là thuộc tính của ký hiệu cơ số mười, không phải quy tắc được đưa vào chuỗi ngày ISO. Các giá trị âm trước kỷ nguyên và ngày ở xa thời điểm hiện tại sẽ làm mất hiệu lực lối tắt đếm chữ số đơn giản.
Tại sao số mili giây lại có mười ba — hệ số của một nghìn, ba chữ số phụ và các quy ước của JavaScript và Java đến từ đâu
JavaScript Date.getTime() thường tính mili giây, nhân dấu thời gian của giây với 1,000. Ba số 0 biến số giây gồm mười chữ số hiện tại thành số mili giây có mười ba chữ số. Ví dụ: 1,700,000,000 giây trở thành 1,700,000,000,000 mili giây; cả hai đều 2023-11-14T22:13:20.000Z. Một trình chuyển đổi chỉ chèn dấu phân cách mà không nêu đơn vị giả định có thể biến một số hợp lệ thành một ngày hợp lý nhưng sai.
Trường hợp đoán sai — các giá trị nhỏ gần kỷ nguyên, ngày trước 2001 và ngày trong tương lai nơi việc đếm chữ số ngừng phân biệt đối xử
Chẩn đoán không thành công ở gần 1970 khi giá trị mili giây có thể ngắn, trước 2001 khi giây có ít hơn 10 chữ số hoặc với bộ đếm micro giây và nano giây. ToolAcre mặc định diễn giải cường độ dưới 10¹¹ dưới dạng giây và các giá trị lớn hơn dưới dạng mili giây và gắn nhãn đơn vị được sử dụng. Ngưỡng đó là phỏng đoán thực tế, không phải là bộ giải mã định dạng rõ ràng. Dấu thời gian được cung cấp bởi API cụ thể phải được diễn giải bằng tài liệu của API đó ngay cả khi độ dài của nó không bình thường.
Ví dụ hoạt động: ba giá trị từ một nhật ký — 1700000000, 1700000000000 và 1700000000000000, đọc theo giây, mili giây và micro giây
Ba số nguyên từ nhật ký minh họa cho thấy cái bẫy. Diễn giải 1700000000 dưới dạng giây và 1700000000000 dưới dạng mili giây: cả hai đều phân giải thành 2023-11-14T22:13:20Z. Diễn giải 1700000000000000 dưới dạng micro giây và chia cho một triệu để có cùng số giây. Trình chuyển đổi ToolAcre chấp nhận giây hoặc mili giây, không phải chế độ micro giây: việc dán số thứ ba đó mà không chuyển đổi đơn vị của nó trước sẽ không xác nhận thời điểm dự định. Luôn giữ trường thô và đơn vị của nó cùng nhau trong khi gỡ lỗi.
Tại sao đơn vị phải được nêu chứ không phải đoán - cách trình chuyển đổi hiển thị đơn vị được áp dụng để giả định sai được hiển thị thay vì im lặng
Dịch vụ gửi dấu thời gian phải đặt tên đơn vị trong lược đồ của nó hoặc sử dụng văn bản ISO 8601 với phần bù rõ ràng. Nếu trường cũ không được ghi lại, hãy so sánh một số giá trị với thời gian sự kiện đáng tin cậy khác trước khi quyết định; một ngày tháng hợp lý ngẫu nhiên là không đủ bằng chứng. Trình chuyển đổi hiển thị đơn vị được áp dụng, tạo cơ hội cho bạn mắc lỗi hệ số1,000. Thay đổi đơn vị một cách rõ ràng và so sánh thay vì dựa vào việc đoán tự động như một hợp đồng API dài hạn.
Điều này không bao gồm những gì — dấu thời gian được lưu dưới dạng chuỗi, ISO 8601 ngày nối tiếp văn bản hoặc bảng tính, là các vấn đề khác nhau
Bài viết này không giải thích các ngày nối tiếp trong Excel, các chuỗi như 2026-09-28T10:15Z hoặc định dạng múi giờ của số đọc đồng hồ địa phương. Đó là những cách thể hiện khác nhau. Dấu thời gian Unix đề cập đến tức thời; cùng một thời điểm xuất hiện dưới dạng thời gian trên đồng hồ treo tường khác nhau ở các khu vực khác nhau. Các quy ước về giây nhuận cũng cần được xử lý riêng và bộ đếm có chữ ký 32-bit có vấn đề tràn trong 2038 khác với câu hỏi về giây so với mili giây.
Bài học rút ra: đếm các chữ số, sau đó xác nhận đơn vị - và cách trình chuyển đổi dấu thời gian Unix đọc cả giây và mili giây với đơn vị được gắn nhãn
Đếm các chữ số làm gợi ý ban đầu, sau đó xác nhận đơn vị đã nêu của nhà sản xuất và ít nhất một sự kiện đã biết. Trình chuyển đổi dấu thời gian Unix làm cho giả định giây/milliseconds được áp dụng hiển thị và in cả UTC và biểu diễn cục bộ trong trình duyệt của bạn. Đừng để một ngày trông gọn gàng ghi đè lên tài liệu trái ngược từ hệ thống tạo ra giá trị.