- Whenever là một thư viện cải thiện
datetime của Python để cung cấp độ an toàn với DST và độ an toàn về kiểu
- Có thể dùng với Rust và Python thuần, đồng thời có hiệu năng cao
- Vượt trội hơn thư viện chuẩn của Python cũng như Arrow và Pendulum về xử lý DST và độ an toàn về kiểu
- Hỗ trợ độ chính xác nano giây và các cải tiến GIL mới nhất, đồng thời tăng hiệu năng thông qua phần mở rộng Rust
- Được cung cấp theo giấy phép MIT và đang liên tục được cải thiện nhờ phản hồi
Giới thiệu về Whenever
- Whenever là thư viện được phát triển để khắc phục các giới hạn của mô-đun
datetime trong Python
- Cung cấp độ an toàn với DST và độ an toàn về kiểu để nâng cao tính chính xác của mã
- Được triển khai bằng Rust và Python thuần, với hiệu năng cao
Giới hạn của thư viện chuẩn
datetime của Python không phải lúc nào cũng tính đến DST
- Hệ thống kiểu không thể phân biệt giữa datetime naive và aware
So sánh với các thư viện khác
- Arrow cung cấp API thân thiện với người dùng nhưng không giải quyết được các vấn đề cốt lõi
- Pendulum đã giải quyết một phần vấn đề về DST, nhưng hiệu năng giảm và việc bảo trì còn hạn chế
Ưu điểm của Whenever
- Cung cấp phép toán số học an toàn với DST và API an toàn về kiểu
- Hiệu năng cao, và còn được cải thiện thêm nhờ phần mở rộng Rust
- Hỗ trợ độ chính xác nano giây và các cải tiến GIL mới nhất
Bắt đầu nhanh
- Cung cấp các kiểu tường minh như
Instant, ZonedDateTime, LocalDateTime
- Hỗ trợ phép toán số học an toàn với DST và chuyển đổi tường minh
- Hỗ trợ định dạng và phân tích cú pháp theo các chuẩn ISO8601, RFC3339, RFC2822
Lộ trình
- Phiên bản 0.x: đạt được mức tương đương về tính năng và cải thiện API
- Phiên bản 1.0: đảm bảo tính ổn định của API và khả năng tương thích ngược
Giới hạn
- Hỗ trợ lịch Gregory trong phạm vi năm 1 đến năm 9999
- Hỗ trợ độ lệch múi giờ khớp với IANA TZ DB
- Không hỗ trợ giây nhuận
Chính sách quản lý phiên bản và tương thích
- Whenever tuân theo semantic versioning
- API có thể thay đổi trước phiên bản 1.0
Giấy phép
- Được cung cấp theo giấy phép MIT, còn các phụ thuộc Rust sử dụng giấy phép cấp quyền tương tự
Lời cảm ơn
- Lấy cảm hứng từ các dự án Temporal, Noda Time, Joda Time
- Dựa trên biểu đồ so sánh benchmark của dự án Ruff
1 bình luận
Ý kiến trên Hacker News
datetimevới ngày thì sẽ phát sinh lỗi. Gần đây tôi đã gặp rắc rối ở chỗ làm vì vấn đề nàydatetimecủa thư viện chuẩn, nhưng cuối cùng chọn Whenever. Nó thực sự phù hợp hơn để xử lýdatetimevà có vẻ được bảo trì tích cực hơn. Tôi luôn có cảm giác các thư viện khác đều bỏ sót những trường hợp biên. Pendulum có vẻ ăn sâu hơn vào APIrequirements.txtdatetime. Có lẽ nó sẽ được dùng để xử lý nhiều ngày tháng hơn bất kỳ thư viện nào khácdatetimelà đối tượng sống ngắn. Bạn hẳn sẽ không muốn có hàng nghìn đối tượngdatetimetrong codebase. Trong gần như mọi trường hợp, UTC là đủ. Khi cần lọc/gom nhóm/tổng hợp theo khoảng, hãy dùngdatetimevớitzđể thiết lập tiêu chí lọc/gom nhóm/tổng hợp, rồi chuyển nó sang UTC để tiếp tục chỉ so sánhint. Phần lớn các trường hợp Whenever xử lý có lẽ là khidatetimelà đối tượng sống lâu. Tôi hoàn toàn không cảm thấy cần điều đó. Tôi dùng nó để chấp nhận đầu vàotztừ client, rồi chuyển ngay sang UTC khi nhận được. Nếu thực sự cầntz, tôi lưu riêng nó. Điều này hiếm khi xảy ra (ví dụ: trong lịch thì cần lưutz, nhưng có lẽ không cần lưu cạnh mọi UTC mà nên lưu ở cấp người dùng. Một ví dụ khác là lập lịch nhân sự, nơi 8am-4pm hoặc 8pm-4am có thể mang ý nghĩa khác nhau tùy địa điểm. Khi đó nó không còn làdatetimenữa mà là thời gian trong một múi giờ)datetimetốt hơn trong dự án cũng không cần quay lạidatetime. Nó cũng dùng được trong môi trường không có toolchain Rust hoặc môi trường gặp vấn đề. Kudospedanticđã được dùng rồi. Timely, precise, punctual, meticulous, ahorita, pronto, v.v. Tôi thích các cái tên liên quan đến thời gian. Cuối cùng, không link nào trong số này nhắc đến tính bất biến, trong khi điều đó đáng ra phải được nhắc ngay từ đầu