Python tarih saat ve zaman modülleri arasındaki fark


137

datetimeVe timemodülleri arasındaki farkları ve her birinin ne için kullanılması gerektiğini anlamaya çalışıyorum .

Bunun datetimehem tarih hem de saat sağladığını biliyorum . timeModülün kullanımı nedir ?

Örnekler takdir edilecektir ve saat dilimlerine ilişkin farklılıklar özellikle ilgi çekici olacaktır.

Yanıtlar:


102

timeModül unix zaman damgaları ile çalışmak için esas olduğu; Unix döneminden bu yana saniye olarak alınan kayan nokta sayısı olarak ifade edilir. datetimeModül, aynı işlemlerin çoğu destekleyen, ancak tiplerinin daha nesne yönelimli bir dizi içerir, ve ayrıca zaman dilimleri için sınırlı bir desteğe sahip olabilir.


22
Dahası, timeve arasındaki farklar datetime.timenelerdir?
SparkAndShine

Gerçek zamanlı / monoton olması gibi özellikleri ayrıntılandırmak güzel olurdu. POSIX standardında olduğu gibi şunlara sahipsiniz: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD, vb ... POSIX saatlerinde bakınız: stackoverflow.com/questions/3523442/…
Vajk Hermecz

12

timeDST belirsizliğini önlemek için bağlı kalın.

Münhasıran sistem kullanın timeyerine modülü datetimeiçin modül yaz saati (DST) ile belirsizlik sorunlarını önlemek .

Yerel saat dahil herhangi bir saat biçimine dönüştürme oldukça kolaydır:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()sistem çağından bu yana geçen süreyi saniye cinsinden temsil eden bir kayan nokta sayısıdır. time.time()kesin zaman damgası için idealdir.

Sistem ek olarak ağ zaman protokolünü (NTP) çalıştırırsa, oldukça sağlam bir zaman tabanı elde edilir.

İşte belgeler arasında timemodülü.


time.localtime()Örneğinizde, elbette ki DST'de pişirilmiş olanı kullanıyorsunuz . Safçı olacaksak, time.gmtime()bunun yerine kullanmamız gerekmez mi? :)
Seamus

@Seamus Her iki komutu da basitçe test etmek ipython, time.gmtime()bir demet time.time()veren şovlarda , UNIX dönem zamanını 1 Ocak 1970 Perşembe 00:00:00 UTC'den bu yana geçen saniyelerin tek bir ondalık değeri olarak verir . İşlev time.localtime(t), dönem saatini yerel değere dönüştürür. zaman kaydı. Yani sorunuzun cevabı "hayır" dır.
Serge Stroobandt

Bir zaman nesnesine gün eklemenin bir yolu var mı? datetime ile timedelta (gün = 6) yöntemi vardır.
Nehemias Herrera

@NehemiasHerrera t = time.time(), sistem çağından bu yana geçen süreyi saniye cinsinden temsil eden bir kayan nokta sayısıdır. Bu nedenle, her gün için 86400 saniye eklenebilir veya çıkarılabilir; t += 86400
Serge Stroobandt

5

Zaman modülü, sadece belirli bir kaydın zamanına ihtiyaç duyduğunuzda kullanılabilir - mesela her gün için işlemler için ayrı bir tablonuz / dosyanız olduğunu varsayalım, o zaman sadece zamana ihtiyacınız olacaktır. Ancak zaman veri türü genellikle 2 zaman noktası arasındaki zaman farkını saklamak için kullanılır .

Bu, datetime kullanılarak da yapılabilir, ancak yalnızca belirli bir gün için zamanla uğraşıyorsak, o zaman zaman modülü kullanılabilir.

Tarih saat, bir kayıt için belirli bir veriyi ve zamanı depolamak için kullanılır. Bir kiralama acentesinde olduğu gibi. Son tarih, bir tarih saat veri türü olacaktır.


3

Saat dilimleriyle ilgileniyorsanız, pytz kullanımını düşünmelisiniz.


8
en çok zaman ve tarih-saat modülleri ve bunlar arasındaki zaman dilimi farklarıyla ilgileniyor gibi görünüyor. Tüm saygımla, buna başka bir bağımlılık getirmek hemen hemen alakasız.
sbartell

3
Hem zaman hem de tarih-saat modüllerinde zaman dilimlerinin desteği gerçekten çok zayıf ... Zaman dilimlerini yararlı bir şekilde ele almakla gerçekten ilgileniyorsa, o zaman pytz hakkında gerçekten bilgi sahibi olmalıdır. Mevcut bağımlılıklarınızın sorununuzu çözmenize yardımcı olmaması sorununu çözmek için bağımlılıklar getiriyorsunuz ...
donkopotamus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.