Tiếng Việt

Công cụ dành cho nhà phát triển · Trình chuyển đổi dấu thời gian Unix

ISO 8601 so với RFC 3339: hai định dạng ngày đằng sau câu trả lời API của bạn

· Lý lịch

dấu thời gian iso-8601 API

Kênh định dạng ngày-giờ rộng thu hẹp thành một hợp đồng API
Hình minh họa vector ToolAcre gốc

Hầu hết các API đều yêu cầu sử dụng ISO 8601 và thực sự sử dụng RFC 3339, một cấu hình chặt chẽ hơn được thiết kế cho Internet. Bài đăng này giải thích hai tài liệu, sự khác biệt của chúng và cách chúng liên quan đến số nguyên kỷ nguyên.

Trường 'ISO 8601' từ chối ISO 8601 hợp lệ — một ngày trong tuần hoặc giá trị có độ chính xác giảm được gửi tới API dự kiến ​​RFC 3339

Trường API được mô tả ngẫu nhiên là “ISO 8601” chỉ có thể chấp nhận một hình dạng ngày giờ. Việc gửi một biểu diễn hợp lệ theo tiêu chuẩn khác vẫn có thể không thực hiện được trình phân tích cú pháp của nó. Biện pháp khắc phục là không tranh cãi từ ô danh; đó là ghi lại ngữ pháp dây chính xác với các ví dụ và bài kiểm tra xác nhận.

ToolAcre đóng góp đầu ra chuẩn ổn định từ `Date.toISOString()`, nhưng nó không phải là bộ tuân thủ cho mọi biểu diễn. Hãy coi chuỗi được tạo như một biểu mẫu trao đổi hữu ích và so sánh nó với hợp đồng API mà bạn thực sự sở hữu.

Do đó, một lược đồ chỉ nên xuất bản một biểu thức chính quy hoặc loại hình thức nếu nó phản ánh chính xác trình phân tích cú pháp. Chỉ riêng các ví dụ thôi cũng đã hữu ích, nhưng các trường hợp từ chối rõ ràng sẽ tạo ra sự mơ hồ.

Tiêu chuẩn ngày rộng và ngữ pháp API hẹp không thể thay thế cho nhau

Biểu mẫu được tạo chứa ngày theo lịch, `T`, thời gian tính bằng mili giây và dấu Z. Quá trình triển khai gọi nó là ISO 8601 (UTC) trong giao diện người dùng. Đầu vào chấp nhận những gì JavaScript Ngày đọc, bao gồm cả phần bù rõ ràng và hình dạng ngày giờ không vùng của bộ chọn cục bộ.

Hành vi đó hẹp hơn nhiều so với trình phân tích cú pháp tiêu chuẩn hoàn chỉnh. Ngày trong tuần, khoảng thời gian, thời lượng và độ chính xác bị giảm sút không có kiểm tra kho lưu trữ. Do đó, một chuỗi được chấp nhận bởi một trình duyệt Ngày không được đảm bảo trên các ngôn ngữ và một biểu mẫu chuyên biệt bị từ chối không chứng minh được vị thế của nó ở nơi khác.

Độ chính xác mili giây cố định của đầu ra là một lựa chọn định dạng, không phải là bằng chứng cho thấy nguồn đo được mili giây. Ngày có thể đã nhận được giá trị nguyên giây và vẫn in `.000`.

ToolAcre phát ra một dạng hình ISO; nó không xác thực tiêu chuẩn ISO 8601 đầy đủ

Sổ làm việc có đặc điểm RFC 3339, năm của nó và các quy tắc bù trừ bắt buộc. Không có văn bản RFC hoặc trình phân tích cú pháp chuyên dụng nào tồn tại trong tập hợp nguồn, vì vậy những thông tin cụ thể đó không được xác nhận. Hợp đồng tác giả yêu cầu loại bỏ độ chính xác không được hỗ trợ thay vì trích dẫn tiêu đề từ bộ nhớ.

Nếu API của bạn có nghĩa là RFC 3339, hãy đặt tên cho nó trong lược đồ và kiểm tra việc triển khai dựa trên đặc tả thực tế. ToolAcre có thể kết nối một kỷ nguyên đã biết với đầu ra UTC ISO của nó để so sánh nhưng không thể chứng nhận rằng đầu vào tùy ý đáp ứng cấu hình đó.

Đây là một biện pháp bảo vệ biên tập và kỹ thuật: hồ sơ tiêu chuẩn là những hợp đồng chính xác và việc diễn giải chúng mà không có văn bản có nguy cơ làm thay đổi các yêu cầu trong tài liệu.

RFC 3339 yêu cầu cần nguồn tiêu chuẩn bên ngoài không có trong kho lưu trữ này

Khiếu nại về dấu phân cách thay thế, ký hiệu chữ thường và `−00:00` phụ thuộc vào ngôn ngữ tiêu chuẩn chính xác. Chúng được bỏ qua ở đây. Trình phát hiện vùng riêng của trình chuyển đổi nhận dạng Z ở cuối hoặc số `±HH:MM` và gắn cờ ngày giờ không có vùng là cục bộ; đó là ranh giới chúng ta có thể xác minh.

Xây dựng xác thực API từ các ví dụ được chấp nhận rõ ràng và các trường hợp từ chối. Không suy ra sự cho phép từ trình phân tích cú pháp tiện lợi của JavaScript Date. Một trình duyệt cho phép có thể bình thường hóa đầu vào mà máy chủ nghiêm ngặt từ chối một cách chính xác, che giấu các lỗi về khả năng tương tác trong quá trình kiểm tra thủ công.

Trình phân tích cú pháp nhận biết tiêu chuẩn chuyên dụng sẽ trả về các lý do lỗi có cấu trúc. Việc để Date bình thường hóa đầu vào rộng có thể biến lỗi xác thực API thành sự khác biệt giữa các nền tảng sau này.

Các quy tắc phân tách cụ thể và phần bù không xác định được bỏ qua mà không có văn bản tiêu chuẩn

Các giá trị kỷ nguyên làm cho số học và thứ tự trở nên nhỏ gọn khi đơn vị và gốc cố định. Ngày giờ văn bản hiển thị UTC hoặc số đọc bù cho mọi người và duy trì chỉ định đó trong quá trình truyền. Nhiều API chọn một chuỗi chuẩn để tránh sự mơ hồ về số nguyên hoặc đơn vị JavaScript.

Nếu API mang cả hai, hãy xác định trường nào có thẩm quyền và kiểm tra thỏa thuận. Một chuỗi có định dạng cũ bên cạnh một kỷ nguyên mới còn tệ hơn cả một chuỗi. ToolAcre có thể so sánh cặp bằng cách chuyển đổi số nguyên và kiểm tra giá trị ISO được tạo nhưng việc thực thi tính nhất quán thuộc về nhà sản xuất.

Ví dụ đã hoạt động: một tức thời, bốn biểu diễn — giây kỷ nguyên, mili giây kỷ nguyên, chuỗi RFC 3339 trong UTC và một chuỗi có độ lệch cục bộ

Sử dụng ngay `2025-02-03T10:22:00.000Z`. Các dạng kỷ nguyên của nó là 1,738,578,120 giây và 1,738,578,120,000 mili giây. Số đọc bù trừ rõ ràng là `2025-02-03T12:22:00+02:00`; phân tích cú pháp nó trong ToolAcre trả về cùng một kỷ nguyên và hàng UTC ISO chuẩn.

Đây là bốn biểu diễn có thể xác minh được kho lưu trữ: giây, mili giây, đầu ra toISOString và chuỗi bù số được phân tích cú pháp theo ngày. Ví dụ này không khẳng định rằng mọi trình phân tích cú pháp bên ngoài đều chấp nhận cùng một cú pháp phân số hoặc độ chính xác phân số. Chạy xác thực riêng của API trước khi vận chuyển.

Trừ phần bù +02:00 khỏi đồng hồ ghi sẽ mang lại 10:22 UTC. Sự bình đẳng đơn giản đó là đủ để kiểm tra đầu vào cụ thể này mà không cần khái quát hóa một ngữ pháp tiêu chuẩn đầy đủ.

Ví dụ đã hoạt động: một tức thời trong bốn biểu mẫu mà kho lưu trữ này có thể xác minh

HTTP tiêu đề và ngày e-mail sử dụng hợp đồng văn bản không được triển khai ở đây. ToolAcre không định dạng các giao thức đó và cũng không hứa hẹn rằng đầu ra ISO của nó có thể được thay thế. Thời điểm tức thời của dấu thời gian có thể giống nhau trong khi cách biểu diễn dây yêu cầu của nó khác nhau.

Duy trì tuần tự hóa giao thức trong các bộ điều hợp chuyên dụng với các thiết bị cố định được sao chép từ các thông số kỹ thuật có thẩm quyền. Sử dụng chuyển đổi kỷ nguyên để xác minh tức thời cơ bản, sau đó kiểm tra ngữ pháp riêng biệt. Điều này ngăn không cho giá trị đúng theo lịch vượt qua quá trình xem xét trong một phong bì không hợp lệ về mặt cú pháp.

Bộ điều hợp chuyên dụng cũng sẽ bảo toàn cho dù phần bù bị thiếu hoặc không xác định có mang ý nghĩa miền hay không. Việc san phẳng mọi ngày tháng trong văn bản thành một giả định cục bộ có thể phá hủy thông tin đó.

Các giao thức văn bản khác vẫn nằm ngoài trình chuyển đổi

Chỉ định định dạng hẹp mà API của bạn chấp nhận thay vì dựa vào nhãn rộng. Đối với công cụ này, đầu ra có thể tái tạo an toàn nhất là chuỗi UTC ISO được trả về bởi `toISOString()` và đầu vào số an toàn nhất bao gồm hợp đồng giây hoặc mili giây rõ ràng.

ToolAcre kết nối các giả định về biểu mẫu và báo cáo đó. Nó không xét xử tất cả các trường hợp biên ISO 8601 hoặc RFC 3339. Quyền sở hữu rõ ràng về ngữ pháp, đơn vị và chỉ định vùng là điều giúp dấu thời gian có thể di chuyển được—không gắn tên tiêu chuẩn quen thuộc vào trường chưa được chỉ định.

Một hợp đồng chính xác sẽ giúp khách hàng thất bại sớm với những thông điệp hữu ích. Một nhãn rộng đẩy sự bất đồng vào thời gian chạy, trong đó hai trình phân tích cú pháp đúng có thể chọn các tập hợp con khác nhau.