Sự khác biệt giữa Định dạng ngày ISO 8601 và RFC 3339 là gì?


279

ISO 8601RFC 3339 dường như là hai định dạng phổ biến trên web. Tôi có nên sử dụng cái này hơn cái kia không? Có phải chỉ là một phần mở rộng? Tôi có thực sự cần phải quan tâm xấu đó?


42
Tôi đã thay đổi liên kết đến RFC từ ietf.org/rfc/rfc3339.txt thành phiên bản HTML tại tools.ietf.org/html/rfc3339 . Khi liên kết với RFC, bạn phải luôn liên kết với các phiên bản HTML tại tools.ietf.org/html . Họ không chỉ dễ dàng điều hướng nhờ các liên kết phần, mà quan trọng hơn, họ liệt kê ở đầu bất kỳ RFC nào đã cập nhật hoặc làm lỗi RFC bạn đang đọc. Mọi người vô tình trích dẫn RFC lỗi thời mọi lúc trên Stack Overflow, và tôi sẽ tiếp tục lặp lại lời khuyên này cho đến khi vấn đề đó biến mất. (Để tránh sự nghi ngờ, này RFC không phải là lạc hậu.)
Đánh dấu Amery

Câu trả lời:


237

Có phải chỉ là một phần mở rộng?

Khá nhiều, có - RFC 3339 được liệt kê dưới dạng hồ sơ của ISO 8601. Đáng chú ý nhất là RFC 3339 chỉ định một đại diện hoàn chỉnh về ngày và thời gian (chỉ một phần giây là tùy chọn). RFC cũng có một số khác biệt nhỏ, tinh tế. Ví dụ: các biểu diễn rút gọn của năm chỉ có hai chữ số không được phép - RFC 3339 yêu cầu năm có 4 chữ số và RFC chỉ cho phép sử dụng ký tự dấu chấm làm dấu thập phân cho giây phân số. RFC cũng cho phép thay thế chữ "T" bằng khoảng trắng (hoặc ký tự khác), trong khi tiêu chuẩn chỉ cho phép bỏ qua (và chỉ khi có sự thỏa thuận giữa tất cả các bên sử dụng đại diện).

Tôi sẽ không lo lắng quá nhiều về sự khác biệt giữa hai loại này, nhưng nếu không may, trường hợp sử dụng của bạn gặp phải họ, sẽ rất đáng để bạn lướt qua:


11
Đó là một cách khác, ISO cho phép bỏ qua 'T' nhưng RFC 3339 bắt buộc công cụ đó.ietf.org/html/rfc3339#page
Java Guy

21
Xin lỗi Java Guy, nhưng điều đó không hoàn toàn chính xác. Phần phụ lục mà bạn đề cập chỉ là thông tin và hạn chế là nhằm mục đích giữ cho ngữ pháp đơn giản hơn. Ghi chú ở cuối phần 5.6 nêu rõ rằng một không gian có thể được sử dụng cho mục đích dễ đọc, đề cập đến việc đề cập trước đó về khả năng đọc là chủ đề của phần 5.2. để trích dẫn: "Các ứng dụng sử dụng cú pháp này có thể chọn, vì mục đích dễ đọc, để chỉ định một ngày đầy đủ và toàn thời gian được phân tách bằng (nói) một ký tự khoảng trắng."
Greg A. Woods

8
@JavaGuy Phần phụ lục mà bạn đã liên kết thậm chí không nói về cú pháp RFC 3339 - nó có tiêu đề ISO 8601 Sưu tầm ABNF và là một nỗ lực để mô tả chính thức ngữ pháp của ISO 8601 bằng ABNF . Không có gì nó nói nên được lấy làm bằng chứng về cú pháp thời gian RFC 3339.
Đánh dấu Amery

3
FWIW: Nó đã được thảo luận trong danh sách coreutils : lists.gnu.org/archive/html/orms-coreutils/2006-05/msg00019.html
Frederick Nord

9
Tôi là tác giả mà Justin (bình luận trước đó) đã liên lạc (mặc dù không chịu trách nhiệm cho hầu hết các công việc nặng ở đó). Tôi xác nhận nhận xét của anh ấy. Nói chung, tôi sẽ đề xuất các tài liệu đặc tả như RFC3339 chỉ định thay vì yêu cầu - đó là bối cảnh sử dụng xác định những gì được yêu cầu . Miễn là nó rõ ràng những gì được dự định, sau đó tham khảo một sản xuất cú pháp cụ thể là tốt. (Điều này không thực sự khác với những gì RFC3339 tự làm khi tham chiếu có chọn lọc đến ISO8601.) Xem thêm GHI CHÚ trong phần 5.6 .
Graham Klyne

20

RFC 3339 chủ yếu là cấu hình của ISO 8601, nhưng thực sự không phù hợp với việc mượn thông số múi giờ "-00: 00" từ RFC 2822. Điều này được mô tả trong bài viết Wikipedia.


4

Bạn không cần phải quan tâm nhiều như vậy. RFC 3339, theo chính nó, là một bộ tiêu chuẩn có nguồn gốc từ ISO 8601. Mặc dù vậy, có một vài khác biệt trong vài phút và tất cả chúng đều được nêu trong RFC 3339. Tôi có thể vượt qua tất cả chúng ở đây, nhưng có lẽ bạn sẽ làm tốt hơn chỉ cần đọc tài liệu cho chính mình trong trường hợp bạn lo lắng:

http://tools.ietf.org/html/rfc3339

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.