Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix
Lỗi sắp xảy ra1000: khi một ngày hiển thị Tháng 1 1970 hoặc năm 56000
· Tại sao nó quan trọng
dấu thời gian gỡ lỗi developer-workflow
Việc trôi qua số giây trong đó mili giây được mong đợi (hoặc ngược lại) là lỗi dấu thời gian phổ biến nhất. Bài đăng này cho thấy nó trông như thế nào theo từng hướng, nơi nó ẩn giữa các ngôn ngữ và cách phát hiện nó trong vài giây.
Mọi người dùng đã tham gia vào 1 tháng 1 1970 — màn hình loại bỏ lỗi và phần phụ trợ hoàn toàn chính xác
Trang hồ sơ hiển thị mọi tài khoản gần tháng 1 1970 là một triệu chứng có quy mô lớn. Phần phụ trợ có thể đã trả về đúng số giây kỷ nguyên trong khi mã giao diện người dùng chuyển chúng trực tiếp đến hàm tạo Ngày diễn giải mili giây. Số đếm ngày nay sẽ giảm đi theo hệ số một nghìn trên trục lịch.
Không vá màn hình bằng cách thêm năm cố định hoặc thay thế ngày. Nắm bắt trường thô, hợp đồng API của nó và lệnh gọi hàm tạo chính xác. ToolAcre cho phép bạn buộc cả hai đơn vị, do đó, một giá trị có thể được kiểm tra mà không thay đổi dữ liệu sản xuất. Việc đọc khớp với một sự kiện đã biết khác sẽ xác định lỗi ranh giới có thể xảy ra.
Hai triệu chứng — số giây được tính theo mili giây API hạ cánh vào tháng 1 1970 và mili giây được tính theo giây API hạ cánh cách đó hàng chục nghìn năm
Giây được hiểu là mili giây gần với kỷ nguyên vì một tỷ mili giây chỉ là một phần nhỏ của một thế kỷ. Lỗi ngược lại mở rộng giá trị nghìn tỷ mili giây thành nghìn tỷ giây, thường nằm ngoài phạm vi ứng dụng thông thường. Cả hai lỗi đều bảo toàn các chữ số trong khi thay đổi tỷ lệ của chúng.
Bài báo mười so với mười ba chữ số được xuất bản đã giải thích về phương pháp phỏng đoán hình ảnh đương đại và những giới hạn của nó. Thay vào đó, bài viết này tập trung vào chẩn đoán và phòng ngừa: lựa chọn đơn vị rõ ràng, bằng chứng sự kiện độc lập và một chuyển đổi tại giao diện nơi đại diện của nhà sản xuất đáp ứng hợp đồng của người tiêu dùng.
Bởi vì cả hai nhánh đều mang tính quyết định nên triệu chứng có thể được tái tạo bằng một thiết bị cố định. Điều đó làm cho việc chứng minh sự không khớp đơn vị dễ dàng hơn so với hành vi định dạng ngôn ngữ hoặc độ lệch đồng hồ không liên tục.
Trong đó ranh giới thường là — JavaScript và Java tính bằng mili giây, công cụ Unix, Python và hầu hết các cơ sở dữ liệu tính bằng giây và tải trọng JSON giữa chúng
Kho lưu trữ này chứng minh rằng JavaScript Ngày tiêu tốn mili giây và ToolAcre nhân số giây trước khi tạo một số giây. Nó không thiết lập các giá trị mặc định của mọi Java, Python, shell hoặc cơ sở dữ liệu API có tên trong sổ làm việc. Những hợp đồng đó phải được kiểm tra nơi chúng được sử dụng.
Số JSON không mang siêu dữ liệu đơn vị. Đặt tên trường `created_at` sẽ chuyển sự mơ hồ giữa các dịch vụ; đặt tên cho nó là `created_at_s` hoặc ghi lại chuỗi ISO làm cho hợp đồng có thể được xem xét. Bộ điều hợp nhận sẽ chuyển đổi một lần thành biểu diễn bên trong thay vì phân tán các phép nhân trên các khung nhìn.
Viết chuyển đổi bên cạnh định nghĩa ranh giới, không phải bên trong trình trợ giúp hiển thị có thể sử dụng lại. Bộ chuyển đổi biết hợp đồng của nhà sản xuất; một trình định dạng chung sẽ nhận được ngay lập tức đã được chuẩn hóa.
Ranh giới đơn vị cụ thể là API; kho lưu trữ này chứng minh JavaScript Ngày sử dụng mili giây
Một thiết bị cố định yếu như `0` không thể phát hiện lỗi vì cả 0 giây và 0 mili giây đều đặt tên cho kỷ nguyên. Các giá trị bịa đặt nhỏ cũng có thể trông giống như những ngày 1970 hợp lý. Một mô hình trả về cùng một quy mô mà người tiêu dùng mong đợi sẽ không bao giờ tạo ra sự không khớp tích hợp thực sự.
Chọn một thời điểm đã biết khác 0 và làm cho hai cách diễn giải trở nên khác nhau một cách rõ ràng. Khẳng định kết quả ISO chuẩn ở ranh giới chứ không chỉ tồn tại đối tượng Date. Bao gồm trường hợp mili giây và trường hợp giây; Các thử nghiệm riêng của ToolAcre so sánh 1,000,000 theo từng đơn vị vì lý do chính xác này.
Lỗi đơn vị tồn tại bất cứ khi nào kiểm tra không phân biệt được hai thang đo
Hãy xem xét `created_at: 1738578000`. Buộc phải tính bằng giây, nó sẽ trở thành `2025-02-03T10:20:00.000Z`; buộc phải tính bằng mili giây, nó sẽ trở thành `1970-01-21T02:56:18.000Z`. Bản ghi triển khai được biết là đã được tạo vào tháng 2 2025 giải quyết sự mơ hồ mà không chỉ dựa vào số lượng chữ số.
Giữ JSON thô bên cạnh sự kiện đã biết đó trong khi sửa bộ điều hợp. Nếu trường là `1738578000000` thì diễn giải mili giây sẽ xác định cùng một thời điểm. Hai giá trị này không bao giờ được chấp nhận thay thế cho nhau trong một lược đồ, ngay cả khi trình chuyển đổi có thể chứng minh sự tương đương của chúng sau khi áp dụng thang đo chính xác.
Ngày triển khai đã biết là bằng chứng độc lập. Nếu không có nó, việc chọn đầu ra hợp lý hơn có thể mã hóa kỳ vọng của người điều tra hơn là thiết lập những gì nhà sản xuất dự định.
Ví dụ đã hoạt động: kiểm tra giá trị create_at theo cả hai đơn vị rõ ràng
Sửa chữa lâu dài bắt đầu ở ranh giới: phân tích đơn vị nguồn được ghi lại, chuyển đổi chính xác một lần và hiển thị giá trị nội bộ được nhập hoặc được đặt tên rõ ràng. Mô tả lược đồ, ví dụ và ứng dụng khách được tạo phải giữ nguyên định dạng hậu tố hoặc ngày giờ. Sau đó, người đánh giá có thể phát hiện ra phép nhân bổ sung trước khi chạy.
Thêm một bản cố định hồi quy với thang đo thực và kỳ vọng ISO cố định. Tránh tự động phát hiện mã ứng dụng khi nhà sản xuất có hợp đồng; phương pháp phỏng đoán là để điều tra dữ liệu kế thừa không chắc chắn. ToolAcre gắn nhãn chính xác cho lựa chọn được phát hiện của mình để dự đoán không thể giả mạo thành siêu dữ liệu được đảm bảo.
Điều này không bao gồm - lỗi múi giờ, làm thay đổi ngày theo giờ thay vì theo thập kỷ
Lỗi múi giờ thường thay đổi màn hình theo giờ và có thể vượt quá một ngày theo lịch. Lỗi hệ số1,000 làm thay đổi hàng thập kỷ hoặc thiên niên kỷ. Việc kết hợp các chẩn đoán sẽ khuyến khích các điều chỉnh bù trừ xung quanh một giá trị có thang đo đã sai. Xác minh thiết bị trước khi kiểm tra định dạng cục bộ.
Tương tự, nguồn gốc kỷ nguyên sai có thể vẫn vô nghĩa trong cả giây và mili giây. Nếu cả hai cách giải thích đều không khớp với bất kỳ sự kiện đã biết nào, hãy ngừng chuyển đổi và điều tra nhà sản xuất. Một công cụ chuyển đổi thu hẹp các giả thuyết; nó không chứng minh được rằng mọi số nguyên lớn đều là thời gian Unix.
Nếu năm là hợp lý nhưng giờ bị dịch chuyển liên tục thì hãy điều tra cách trình bày vùng. Việc tách riêng các thang triệu chứng này sẽ rút ngắn đường dẫn từ ảnh chụp màn hình đến nguyên nhân gốc rễ.
Bài học rút ra: một đơn vị sai là một thế kỷ sai - và cách đơn vị đã nêu của trình chuyển đổi dấu thời gian Unix cho phép bạn kiểm tra cả hai số đọc trong giây lát
Đơn vị sai không phải là siêu dữ liệu mỹ phẩm—nó sẽ thay đổi ngay lập tức. Hãy coi 1970 màn hình nặng và những năm xa xôi vô lý như những tín hiệu để kiểm tra mối quan hệ giữa nhà sản xuất và người tiêu dùng. Giá trị, hợp đồng đơn vị và sự kiện đã biết tạo thành bằng chứng ba phần mạnh mẽ hơn một ngày có vẻ hợp lý.
Sử dụng trình chuyển đổi để so sánh các số đọc rõ ràng, sau đó mã hóa thang đo đã chọn theo tên, loại và bài kiểm tra. Mục đích không phải là dạy phần mềm đoán thông minh hơn. Đó là loại bỏ sự phỏng đoán khỏi đường dẫn tạo ngày tháng cho người dùng.
Sau đó, việc đánh giá mã có thể đặt một câu hỏi chính xác ở mỗi ranh giới: đơn vị nào đi vào và đơn vị nào rời đi? Điều đó đáng tin cậy hơn việc nhận ra một số chữ số cụ thể.