Differenza tra i moduli Python datetime e time


137

Sto cercando di capire le differenze tra il datetimee timemoduli, e ciò che ciascuno dovrebbe essere usato per.

So che datetimefornisce sia le date che l'ora. A che serve il timemodulo?

Gli esempi sarebbero apprezzati e le differenze relative ai fusi orari sarebbero particolarmente interessanti.

Risposte:


102

il timemodulo è principalmente per lavorare con timestamp unix; espresso come un numero in virgola mobile considerato secondi dall'epoca di unix. il datetimemodulo può supportare molte delle stesse operazioni, ma fornisce un set di tipi più orientato agli oggetti e ha anche un supporto limitato per i fusi orari.


22
Inoltre, quali sono le differenze tra timee datetime.time?
SparkAndShine

Sarebbe bello dettagliare le proprietà come se fosse in tempo reale / monotonico. Come nello standard POSIX si dispone: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD, ecc ... orologi On POSIX vedere: stackoverflow.com/questions/3523442/...
Vajk Hermecz

12

Attenersi a timeper evitare l'ambiguità dell'ora legale.

Utilizzare esclusivamente il timemodulo di sistema anziché il datetimemodulo per prevenire problemi di ambiguità con l'ora legale (DST) .

La conversione in qualsiasi formato di ora, inclusa l'ora locale, è piuttosto semplice:

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()è un numero in virgola mobile che rappresenta il tempo in secondi dall'epoca del sistema. time.time()è ideale per timestamp inequivocabile.

Se il sistema esegue inoltre il protocollo NTP (Network Time Protocol) , si ottiene una base dei tempi piuttosto solida.

Ecco la documentazione del timemodulo.


Nel tuo esempio, usi time.localtime(), che ovviamente ha l'ora legale inserita. Se diventeremo puristi, non dovremmo usare time.gmtime()invece? :)
Seamus,

@Seamus Semplicemente testando entrambi i comandi in ipythonmostra che time.gmtime()produce una tupla, mentre time.time()fornisce il tempo di epoca UNIX come un singolo valore decimale di secondi trascorsi dalle 00:00:00 UTC, giovedì 1 gennaio 1970. La funzione time.localtime(t)converte il tempo di epoca in un locale tupla del tempo. Quindi, la risposta alla tua domanda è «no».
Serge Stroobandt,

C'è un modo per aggiungere giorni a un oggetto tempo? con datetime c'è il metodo timedelta (days = 6).
Nehemias Herrera

@NehemiasHerrera t = time.time()è un numero in virgola mobile che rappresenta il tempo in secondi dall'epoca del sistema. Quindi, si può semplicemente aggiungere o sottrarre 86400 secondi per ogni giorno; t += 86400
Serge Stroobandt

5

Il modulo orario può essere utilizzato quando hai solo bisogno del tempo di un particolare record, ad esempio supponiamo che tu abbia una tabella / file separato per le transazioni per ogni giorno, quindi ti servirà solo il tempo. Tuttavia, il tipo di dati time viene solitamente utilizzato per memorizzare la differenza di tempo tra 2 punti di tempo.

Questo può essere fatto anche usando datetime, ma se abbiamo a che fare solo con l'ora di un determinato giorno, allora il modulo orario può essere usato.

Il datetime viene utilizzato per memorizzare dati e tempi specifici per un record. Come in un'agenzia di noleggio. La data di scadenza sarebbe un tipo di dati datetime.


3

Se sei interessato ai fusi orari, dovresti considerare l'uso di pytz.


8
sembra che sia più interessato ai moduli time e datetime e alle differenze di fusi orari tra di loro. con tutto il rispetto, portare un'altra dipendenza in questo è praticamente irrilevante.
sbartell,

3
Il supporto dei fusi orari in entrambi i moduli time e datetime è davvero molto scarso ... se è veramente interessato a gestire i fusi orari in modo utile, allora dovrebbe davvero conoscere pytz.
Introduci
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.