Domanda Come ottenere l'ora corrente in Python


Qual è il modulo / metodo utilizzato per ottenere l'ora corrente?


1950
2018-01-06 04:54


origine


risposte:


Uso:

>>> import datetime
>>> datetime.datetime.now()
datetime(2009, 1, 6, 15, 8, 24, 78915)

>>> print(datetime.datetime.now())
2018-07-29 09:17:13.812189

E solo il tempo:

>>> datetime.datetime.time(datetime.datetime.now())
datetime.time(15, 8, 24, 78915)

>>> print(datetime.datetime.time(datetime.datetime.now()))
09:17:51.914526

Lo stesso, ma leggermente più compatto:

>>> datetime.datetime.now().time()

Vedere la documentazione per maggiori informazioni.

Per salvare la digitazione, puoi importare il file datetime oggetto dal datetime modulo:

>>> from datetime import datetime

Quindi rimuovere il leader datetime. da tutto quanto sopra.


1990
2018-01-06 04:57



Puoi usare time.strftime():

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

785
2018-01-06 04:59



Simile a La risposta di Harley, ma usa il str() funzione per un formato veloce-n-sporco, leggermente più leggibile:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'

406
2018-05-04 00:56



>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Per questo esempio, l'output sarà simile a questo: '2013-09-18 11:16:32'

Ecco la lista di strftime.


367
2018-01-09 05:50



Come ottengo l'ora corrente in Python?

Il time modulo

Il time modulo fornisce funzioni che ci dice il tempo in "secondi dall'epoca" e altre utilità.

import time

Unix Epoch Time

Questo è il formato in cui inserire la data e l'ora per il salvataggio nei database. È un semplice numero in virgola mobile che può essere convertito in un numero intero. È anche utile per l'aritmetica in secondi, poiché rappresenta il numero di secondi dal 1 ° gennaio 1970 alle 00:00:00, ed è la luce della memoria relativa alle altre rappresentazioni del tempo che vedremo in seguito:

>>> time.time()
1424233311.771502

Questo timestamp non tiene conto dei secondi bisestili, quindi non è lineare - i secondi bisestili vengono ignorati. Quindi, anche se non è equivalente allo standard internazionale UTC, è vicino, e quindi abbastanza buono per la maggior parte dei casi di tenuta dei registri.

Questo non è l'ideale per la pianificazione umana, tuttavia. Se si dispone di un evento futuro che si desidera eseguire in un determinato momento, è necessario archiviarlo con una stringa che può essere analizzata in un oggetto datetime o in un oggetto datetime serializzato (verranno descritti in seguito).

time.ctime

Puoi anche rappresentare l'ora corrente nel modo preferito dal tuo sistema operativo (il che significa che può cambiare quando cambi le tue preferenze di sistema, quindi non fare affidamento su questo per essere standard su tutti i sistemi, come ho visto altri si aspettano) . In genere è facile da usare, ma in genere non genera stringhe che è possibile ordinare cronologicamente:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Puoi idratare i timestamp in forma leggibile con ctime anche:

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Questa conversione non va bene anche per la conservazione dei registri (eccetto che nel testo che sarà analizzato solo dagli umani) e con il miglior riconoscimento ottico dei caratteri e l'intelligenza artificiale, penso che il numero di questi casi diminuirà).

datetime modulo

Il datetime il modulo è anche abbastanza utile qui:

>>> import datetime

datetime.datetime.now

Il datetime.now è un metodo di classe che restituisce l'ora corrente. Usa il time.localtime senza le informazioni sul fuso orario (se non specificato, altrimenti vedi sotto riportato timezone). Ha una rappresentazione (che ti permetterebbe di ricreare un oggetto equivalente) echeggiata sulla shell, ma quando stampata (o forzata ad un str), è in formato leggibile dall'uomo (e quasi ISO) e l'ordinamento lessicografico è equivalente al tipo cronologico:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

datetime di utcnow

In questo modo è possibile ottenere un oggetto datetime nell'ora UTC, uno standard globale:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC è uno standard temporale quasi equivalente al fuso orario GMT. (Mentre GMT e UTC non cambiano per l'ora legale, i loro utenti possono passare ad altri fusi orari, come l'ora legale britannica, durante l'estate.)

Data / ora fuso orario consapevole

Tuttavia, nessuno degli oggetti datetime creati finora può essere facilmente convertito in vari fusi orari. Possiamo risolvere questo problema con il pytz modulo:

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Equivalentemente, in Python 3 abbiamo il timezone classe con un utc timezone istanza allegata, che rende anche l'oggetto fuso orario consapevole (ma per convertire in un altro fuso orario senza la pratica pytz il modulo è lasciato come esercizio al lettore):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

E vediamo che possiamo facilmente convertire in fusi orari dall'oggetto utc originale.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

È anche possibile rendere un oggetto datetime ingenuo consapevole del file pytz fuso orario localize metodo, o sostituendo l'attributo tzinfo (con replace, questo è fatto alla cieca), ma questi sono più ultimi resort rispetto alle migliori pratiche:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

Il pytz il modulo ci consente di fare il nostro datetime oggetti timezone aware e convertono i tempi in centinaia di fusi orari disponibili in pytz modulo.

Uno potrebbe apparentemente serializzare questo oggetto per l'ora e l'ora UTC quella in un database, ma richiederebbe molta più memoria ed essere più incline all'errore rispetto alla semplice memorizzazione del tempo di Unix Epoch, che ho dimostrato per primo.

Gli altri modi di visualizzare i tempi sono molto più inclini agli errori, specialmente quando si tratta di dati che potrebbero provenire da fusi orari diversi. Volete che non ci sia confusione su quale fuso orario è stato progettato per una stringa o un oggetto datetime serializzato.

Se stai visualizzando l'ora con Python per l'utente, ctime funziona bene, non in un tavolo (in genere non si classifica bene), ma forse in un orologio. Tuttavia, personalmente raccomando, quando si lavora con il tempo in Python, usando Unix time o UTC timezone aware datetime oggetto.


203
2018-02-18 05:08



Fare

from time import time

t = time()
  • t - numero flottante, ottimo per la misurazione dell'intervallo di tempo.

C'è qualche differenza per le piattaforme Unix e Windows.


112
2018-01-06 13:55



>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

Questo emette il GMT corrente nel formato specificato. C'è anche un metodo localtime ().

Questo pagina ha più dettagli


83
2018-01-06 05:02



Tutti buoni suggerimenti, ma trovo che sia più facile da usare ctime() me stessa:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

Questo dà una rappresentazione di stringa ben formattata dell'ora locale corrente.


44
2017-10-31 15:39



Se hai bisogno di tempo corrente come a time oggetto:

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

35
2017-12-27 10:24



Il modo più veloce è

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'

32
2017-09-24 11:21