- Whenever, Python'un
datetime yapısını geliştirerek DST güvenliği ve tip güvenliği sunan bir kütüphanedir
- Rust ve saf Python ile kullanılabilir ve performansı yüksektir
- Python standart kütüphanesi ile Arrow ve Pendulum'a kıyasla DST işleme ve tip güvenliği açısından üstündür
- Nanosaniye hassasiyeti ve en güncel GIL iyileştirmelerini destekler, ayrıca Rust uzantısı ile performansı artırır
- MIT lisansı ile sunulur ve geri bildirimler doğrultusunda sürekli geliştirilmektedir
Whenever'e Giriş
- Whenever, Python'un
datetime modülünün sınırlamalarını aşmak için geliştirilmiş bir kütüphanedir
- DST güvenliği ve tip güvenliği sağlayarak kodun doğruluğunu artırır
- Rust ve saf Python ile uygulanmıştır ve yüksek performans sunar
Standart kütüphanenin sınırlamaları
- Python'un
datetime yapısı DST'yi her zaman dikkate almaz
- Tip sistemi içinde naive ve aware datetime türleri ayırt edilemez
Diğer kütüphanelerle karşılaştırma
- Arrow, kullanıcı dostu bir API sunar ancak temel sorunları çözemez
- Pendulum, bazı DST sorunlarını çözmüş olsa da performansı düşer ve bakımı yetersizdir
Whenever'in avantajları
- DST güvenli aritmetik işlemler ve tip güvenli API sunar
- Performansı yüksektir ve Rust uzantısı ile daha da iyileştirilir
- Nanosaniye hassasiyetini ve en güncel GIL iyileştirmelerini destekler
Hızlı başlangıç
Instant, ZonedDateTime, LocalDateTime gibi açık tipler sunar
- DST güvenli aritmetik işlemler ve açık dönüşümler yapılabilir
- ISO8601, RFC3339, RFC2822 biçimlerinde formatlama ve ayrıştırma desteği sunar
Yol haritası
- 0.x sürümü: özellik eşdeğerliğini sağlama ve API iyileştirmeleri
- 1.0 sürümü: API kararlılığı ve geriye dönük uyumluluğu sağlama
Sınırlamalar
- Milattan sonra 1 ile 9999 yılları arasındaki Gregoryen takvimi destekler
- IANA TZ DB ile uyumlu saat dilimi ofsetlerini destekler
- Artık saniyeler desteklenmez
Sürümleme ve uyumluluk politikası
- Whenever, semantik sürümlemeyi takip eder
- 1.0 sürümüne kadar API değişiklikleri olabilir
Lisans
- MIT lisansı ile sunulur ve Rust bağımlılıkları benzer izin verici lisanslar kullanır
Teşekkür
- Temporal, Noda Time, Joda Time projelerinden ilham alınmıştır
- Ruff projesinin benchmark karşılaştırma grafiği temel alınmıştır
1 yorum
Hacker News yorumları
datetimeile tarihi karşılaştırınca hata oluşuyor. Yakın zamanda işte bu yüzden sıkıntı yaşadımdatetimekullandım ama sonunda Whenever'ı seçtim. Gerçektendatetimeile çalışmak için daha uygun ve daha aktif biçimde bakımı yapılıyor gibi görünüyor. Diğer kütüphanelerde hep bazı uç durumların gözden kaçtığı hissine kapıldım. Pendulum ise API'nin içine daha derinden işlemiş gibi duruyorrequirements.txtiçine yazılamıyordatetimekarşılaştırmasını eklememesi ilginç. Muhtemelen diğer kütüphanelerden daha fazla tarih işlemek için kullanılıyordurdatetime'ı kısa ömürlü nesneler olarak düşünüyorum. Kod tabanında binlercedatetimenesnesi olsun istemezsiniz. Neredeyse her durumda UTC yeterli. Aralıkla filtreleme/kümeleme/toplulaştırma gerektiğinde, filtreleme/kümeleme/toplulaştırma ölçütünü ayarlamak içindatetime'ıtzile kullanıp sonra bunu UTC'ye çevirerekintkarşılaştırmalarına devam ediyorum. Whenever'ın ele aldığı durumların çoğu herhaldedatetimeuzun ömürlü bir nesne olduğunda ortaya çıkıyordur. Böyle bir ihtiyacı hiç hissetmedim. İstemcidentzgirdisini kabul etmek için kullanıyorum ve gelir gelmez UTC'ye çeviriyorum. Gerçektentzgerekiyorsa ayrıca saklıyorum. Bu nadiren oluyor (örneğin takvimlerdetzsaklanmalı ama muhtemelen her UTC değerinin yanında değil, kullanıcı düzeyinde saklanmalı. Bir başka örnek, personel planlamasında 8am-4pm veya 8pm-4am saatlerinin konuma göre farklı anlamlara gelebilmesi. Bu artıkdatetimedeğil, zaman dilimindeki saattir)datetimeişleme istediğinizde tekrardatetime'a dönmeniz gerekmiyor. Rust araç zinciri olmayan ya da sorunlu ortamlarda da kullanılabiliyor. Tebriklerpedanticzaten kullanılıyor. Timely, precise, punctual, meticulous, ahorita, pronto vb. Zamanla ilgili isimleri seviyorum. Son olarak, bu bağlantıların hiçbirinde değişmezlikten bahsedilmiyor ama en üstte belirtilmesi gerekirdi