Come ottenere l'ora corrente in Python


2891

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


si prega di notare che le risposte più votate sono per il datetime timezonoe-naive, mentre vediamo che nell'ambiente di produzione sempre più servizi in tutto il mondo sono collegati insieme e il datetime consapevole del fuso orario diventa lo standard richiesto
Sławomir Lenart

Risposte:


3054

Uso:

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

>>> print(datetime.datetime.now())
2009-01-06 15:08:24.789150

E proprio il tempo:

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

>>> print(datetime.datetime.now().time())
15:08:24.789150

Vedere la documentazione per ulteriori informazioni.

Per salvare la digitazione, è possibile importare l' datetimeoggetto dal datetimemodulo:

>>> from datetime import datetime

Quindi rimuovere la derivazione datetime.da tutto quanto sopra.


25
Sarebbe bello se questa risposta riguardasse i fusi orari (forse UTC come esempio) e forse inizi con time.time ().
Greg Lindahl,

4
@Toskan il formato non faceva parte della domanda, quindi non dovrebbe essere parte della risposta. C'è già un link fornito a più documentazione del modulo che contiene elementi come la formattazione.
JiyuuSensei,

In quale versione di Python è stata data la risposta originale? Basta digitare datetime.datetime.now()nella mia console interattiva Python 2.7 (IronPython non è ancora stato aggiornato) mi dà lo stesso comportamento dell'esempio più recente che utilizza print()nella risposta. Non ho replicato con successo ciò che mostra la risposta originale (datetime.datetime (2009, 1, 6, 15, 8, 24, 78915)). (Non che lo voglia davvero, il comportamento print () è preferito, ma sono curioso.)
RTHarston,

@BobVicktor: Python 2.7, 3.7 e 3.8 offrono tutti lo stesso comportamento per me, non sono sicuro di quello che stai vedendo.
Harley Holcombe,

@HarleyHolcombe Hmm ... forse è una cosa IronPython? Quando datetime.now()print(datetime.now())
scrivo da

956

Puoi usare time.strftime():

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

48
È meglio / peggio della risposta di @ ParaMeterz qui sotto? Perché dovremmo usare il timemodulo contro il datetimemodulo?
Nathan,

3
Non restituisce l'ora corrente del mio computer.
Saeed,

5
Questa è l'ora UTC, diversa dal modulo datetime
Voyager

5
@Saeed: utilizzare la funzione localtime()invece di gmtime()per ottenere l'ora locale.
Jeyekomon,

3
@frank Vedere domanda relativa sul datetimevs. time.
Packard CPW

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

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

Ecco l'elenco delle strftimedirettive .


456

Simile alla risposta di Harley , ma usa la str()funzione per un formato leggibile rapidamente, leggermente più umano:

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

13
Tutto ciò che chiede è ottenere l'ora corrente, non visualizzarla.
pppery

@ppperry, quindi assegna semplicemente una variabile alla risposta di Ray - come: myTime = str (datetime.now ()) .
Lukas,

2
Non rilevante; il passo "str" ​​non rientra nell'ambito della domanda
pppery

4
@pppery Né l'operatore dice che non si tratta di ottenere una stringa del tempo. L'op non dice affatto cosa vogliono fare con il tempo, quindi perché è una brutta cosa mostrare come trasformarlo in una stringa? La maggior parte delle risposte parla di come ottenere una stringa dal momento, quindi sembra essere un caso d'uso comune, quindi perché individuare la risposta di Ray? A che serve semplicemente passare il tempo senza sapere come farci qualcosa? Puoi stamparlo o fare matematica su di esso, e solo un paio di risposte mostrano come fare matematica su di esso, quindi penso che stampare / ottenere una stringa sia un uso comune. ;-) (So che è quello per cui sono venuto.)
RTHarston,

1
Il fatto che questa risposta abbia più di 440 voti suggerisce che l'aggiunta minore del metodo stringa è stata utile a molte persone.
Giovanni

360

Come posso ottenere l'ora corrente in Python?

Il timemodulo

Il timemodulo fornisce funzioni che ci indicano il tempo in "secondi dall'epoca" e altre utilità.

import time

Unix Epoch Time

Questo è il formato in cui dovresti ottenere i timestamp per il salvataggio nei database. È un semplice numero in virgola mobile che può essere convertito in un numero intero. È anche buono per l'aritmetica in secondi, poiché rappresenta il numero di secondi dal 1 ° gennaio 1970 alle 00:00:00, ed è la luce della memoria rispetto alle altre rappresentazioni del tempo che vedremo dopo:

>>> time.time()
1424233311.771502

Questo timestamp non tiene conto dei secondi bisestili, quindi non è lineare: i secondi saltati vengono ignorati. Quindi, sebbene non sia equivalente allo standard UTC internazionale, è vicino e quindi abbastanza buono per la maggior parte dei casi di conservazione dei registri.

Questo non è l'ideale per la programmazione umana, tuttavia. Se hai un evento futuro che vorresti aver luogo in un determinato momento, ti consigliamo di archiviarlo con una stringa che può essere analizzata in un oggetto datetime o un oggetto datetime serializzato (questi saranno 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 di esso come standard su tutti i sistemi, come ho visto altri aspettarsi) . Questo è in genere facile da usare, ma in genere non risulta in stringhe che è possibile ordinare in ordine cronologico:

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

Puoi anche idratare i timestamp in una forma leggibile dall'uomo con ctime:

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

Questa conversione non è buona anche per la tenuta dei registri (tranne che nel testo che verrà analizzato solo dagli umani - e con il miglioramento del riconoscimento ottico dei caratteri e dell'intelligenza artificiale, penso che il numero di questi casi diminuirà).

datetime modulo

Il datetimemodulo è anche abbastanza utile qui:

>>> import datetime

datetime.datetime.now

Il datetime.nowè un metodo di classe che restituisce l'ora corrente. Utilizza le informazioni time.localtimesenza fuso orario (se non fornite, altrimenti vedere il fuso orario di seguito). Ha una rappresentazione (che ti consentirebbe di ricreare un oggetto equivalente) echeggiato sulla shell, ma quando stampato (o costretto a un str), è in formato leggibile (e quasi ISO) umano, e l'ordinamento lessicografico è equivalente al ordinamento 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

Puoi ottenere un oggetto datetime in tempo UTC, uno standard globale, facendo questo:

>>> 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.)

fuso orario datetime consapevole

Tuttavia, nessuno degli oggetti datetime che abbiamo creato finora può essere facilmente convertito in vari fusi orari. Possiamo risolvere quel problema con il pytzmodulo:

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

Allo stesso modo, in Python 3 abbiamo la timezoneclasse con timezoneun'istanza utc collegata, che rende anche consapevole il fuso orario dell'oggetto (ma per convertire in un altro fuso orario senza il comodo pytzmodulo viene 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

Puoi anche rendere consapevole un oggetto datetime ingenuo con il metodo del pytzfuso orario localizeo sostituendo l'attributo tzinfo (con replace, questo è fatto alla cieca), ma queste sono più ultime risorse che best practice:

>>> 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 pytzmodulo ci consente di rendere datetimeconsapevoli i nostri oggetti fuso orario e convertire i tempi in centinaia di fusi orari disponibili nel pytzmodulo.

Si potrebbe apparentemente serializzare questo oggetto per tempo UTC e memorizzare che in un database, ma richiederebbe molto più memoria e più soggetto a errori che semplicemente memorizzare il tempo Unix Epoch, che ho dimostrato prima.

Gli altri modi di visualizzare i tempi sono molto più soggetti a errori, soprattutto quando si tratta di dati che possono provenire da fusi orari diversi. Volete che non ci sia confusione sul fuso orario a cui era destinata una stringa o un oggetto datetime serializzato.

Se stai visualizzando l'ora con Python per l'utente, ctimefunziona bene, non in una tabella (in genere non si ordina bene), ma forse in un orologio. Tuttavia, personalmente consiglio, quando si ha a che fare con il tempo in Python, di usare Unix time o un datetimeoggetto UTC sensibile al fuso orario .


133

Fare

from time import time

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

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


Il mio risultato su Windows 10 a casa era 1576095264.2682993 - per Windows, questo potrebbe dare solo il tempo in secondi.
PythonMaster202,

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

Ciò genera il GMT corrente nel formato specificato. C'è anche un localtime()metodo.

Questa pagina ha maggiori dettagli.


70

Le risposte precedenti sono tutti buoni suggerimenti, ma trovo che sia più facile da usare ctime():

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

Ciò fornisce una rappresentazione di stringa ben formattata dell'ora locale corrente.


L'OP ha chiesto come ottenere il tempo, non come visualizzarlo!
TheTechRobo36414519

59

Il modo più veloce è:

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

52

Se è necessario l'ora corrente come timeoggetto:

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

36

.isoformat() è nella documentazione, ma non ancora qui (questo è molto simile alla risposta di @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

35

Perché non chiedere all'Osservatorio navale statunitense , il cronometrista ufficiale della Marina degli Stati Uniti?

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

Se vivi nella zona DC (come me) la latenza potrebbe non essere troppo male ...


18
@ C8H10N4O2 Mentre hai ragione nel dire che le altre risposte presuppongono che il tuo computer sia già al momento giusto, questa risposta presuppone che il computer abbia una connessione a Internet, che tu sia negli Stati Uniti e che non elimineranno mai quel file / modifica il link. Molte più ipotesi in questa risposta di quanto accettato. Ancora intelligente comunque
sudobangbang,

34

Usare i panda per ottenere l'ora corrente, in un certo senso sovraccaricare il problema:

import pandas as pd
print(pd.datetime.now())
print(pd.datetime.now().date())
print(pd.datetime.now().year)
print(pd.datetime.now().month)
print(pd.datetime.now().day)
print(pd.datetime.now().hour)
print(pd.datetime.now().minute)
print(pd.datetime.now().second)
print(pd.datetime.now().microsecond)

Produzione:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693

28

Questo è quello che ho finito per andare con:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

Inoltre, questa tabella è un riferimento necessario per scegliere i codici di formato appropriati per ottenere la data formattata nel modo desiderato (dalla documentazione "datetime" di Python qui ).

tabella dei codici del formato strftime


2
strftime(time_format)restituisce l'ora locale corrente come una stringa che corrisponde al dato time_format. Nota: time.strftime()e datetime.strftime()supporta diversi set di direttive, ad esempio, %znon è supportato da time.strftime()su Python 2 .
jfs,

1
È meglio usare il datetime invece del tempo?
Kristen G.

2
Molte timefunzioni del modulo sono involucri sottili attorno alle corrispondenti funzioni C. datetimeè di livello superiore ed è generalmente più portatile.
jfs,

25

se si sta già utilizzando numpy, è possibile utilizzare direttamente la funzione numpy.datetime64 ().

import numpy as np
str(np.datetime64('now'))

per solo data:

str(np.datetime64('today'))

oppure, se stai già utilizzando panda, puoi utilizzare la funzione pandas.to_datetime ()

import pandas as pd
str(pd.to_datetime('now'))

o,

str(pd.to_datetime('today'))

24

Puoi usare il timemodulo:

import time
print time.strftime("%d/%m/%Y")

>>> 06/02/2015

L'uso del capitale Ydà l'intero anno, e l'utilizzo ydarebbe 06/02/15.

Puoi anche usare il seguente codice per avere un tempo più lungo:

time.strftime("%a, %d %b %Y %H:%M:%S")
>>> 'Fri, 06 Feb 2015 17:45:09'

20

datetime.now()restituisce l'ora corrente come oggetto datetime ingenuo che rappresenta l'ora nel fuso orario locale. Tale valore può essere ambiguo, ad esempio durante le transizioni dell'ora legale ("fallback"). Per evitare ambiguità, utilizzare il fuso orario UTC:

from datetime import datetime

utc_time = datetime.utcnow()
print(utc_time) # -> 2014-12-22 22:48:59.916417

O un oggetto sensibile al fuso orario al quale sono associate le informazioni sul fuso orario corrispondenti (Python 3.2+):

from datetime import datetime, timezone

now = datetime.now(timezone.utc).astimezone()
print(now) # -> 2014-12-23 01:49:25.837541+03:00

18
import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

Fare dir(date)o qualsiasi variabile incluso il pacchetto. È possibile ottenere tutti gli attributi e i metodi associati alla variabile.


@snofty e @ user1016274, se import datetimeallora è datetime.datetime.now()\ n se from datetime import datetimeallora lo èdatetime.now()
theBuzzyCoder

18
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'

Penso che intendi dire "datetime.now (). Strftime (...)"
hlin117,

sì, può essere fatto come hai detto. "datetime.datetime.now (). strftime ("% H:% M:% S:% MS ")"
user2030113

3
% MS non ti dà millisecondi !!
ZF007,

16

Per impostazione predefinita, la now()funzione restituisce l'output nel YYYY-MM-DD HH:MM:SS:MSformato. Utilizzare lo script di esempio seguente per ottenere la data e l'ora correnti in uno script Python e stampare i risultati sullo schermo. Crea un file getDateTime1.pycon il contenuto seguente.

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

L'output è simile al seguente:

2018-03-01 17:03:46.759624

15

Questa domanda non ha bisogno di una nuova risposta solo per il gusto di farlo ... un brillante giocattolo / modulo nuovo, tuttavia, è una giustificazione sufficiente. Essendo la biblioteca del Pendolo , che sembra fare il genere di cose che la freccia ha tentato, tranne senza i difetti e gli insetti intrinseci che assillano la freccia.

Ad esempio, la risposta alla domanda originale:

>>> import pendulum
>>> print(pendulum.now())
2018-08-14T05:29:28.315802+10:00
>>> print(pendulum.now('utc'))
2018-08-13T19:29:35.051023+00:00

Ci sono molti standard che devono essere affrontati, inclusi RFC e ISO multipli, di cui preoccuparsi. Mai mescolarli; non preoccuparti, dai un'occhiata a dir(pendulum.constants)C'è un po 'più di formati RFC e ISO lì, però.

Quando diciamo locale, ma cosa intendiamo? Bene intendo:

>>> print(pendulum.now().timezone_name)
Australia/Melbourne
>>>

Presumibilmente la maggior parte di tutti voi intendete altrove.

E continua così. Per farla breve: Pendulum tenta di fare per data e ora cosa hanno fatto le richieste per HTTP. Vale la pena prendere in considerazione, in particolare sia per la facilità d'uso che per la vasta documentazione.


14

Ora corrente di un fuso orario

from datetime import datetime
import pytz

tz_NY = pytz.timezone('America/New_York') 
datetime_NY = datetime.now(tz_NY)
print("NY time:", datetime_NY.strftime("%H:%M:%S"))

tz_London = pytz.timezone('Europe/London')
datetime_London = datetime.now(tz_London)
print("London time:", datetime_London.strftime("%H:%M:%S"))

tz_India = pytz.timezone('Asia/India')
datetime_India = datetime.now(tz_India)
print("India time:", datetime_India.strftime("%H:%M:%S"))

#list timezones
pytz.all_timezones

12

Prova il modulo freccia da http://crsmithdev.com/arrow/ :

import arrow
arrow.now()

O la versione UTC:

arrow.utcnow()

Per modificarne l'output, aggiungi .format ():

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

Per un fuso orario specifico:

arrow.now('US/Pacific')

Un'ora fa:

arrow.utcnow().replace(hours=-1)

O se vuoi l'essenza.

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'

5
attenzione che arrow.now('Time/Zone')potrebbe non riuscire per alcuni fusi orari ( arrowusi dateutilche hanno rotto utc -> conversioni locali che vengono utilizzate all'interno arrow.now(). Nota: pytznon ha questo problema . Inoltre, ci sono altri problemi relativi al fuso orario
jfs

12

Voglio passare il tempo con i millisecondi. Un modo semplice per ottenerli:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

Ma voglio solo millisecondi , giusto? Il modo più breve per ottenerli:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

Aggiungi o rimuovi zeri dall'ultima moltiplicazione per regolare il numero di punti decimali o semplicemente:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

1
Funziona in Python 3: time.strftime ("% H:% M:% S", time.localtime ()) + '. {}'. Format (int (time.time ()% 1 * 1000))
Greg Graham,

12

È possibile utilizzare questa funzione per ottenere l'ora (purtroppo non dice AM o PM):

def gettime():
    from datetime import datetime
    return ((str(datetime.now())).split(' ')[1]).split('.')[0]

Per ottenere ore, minuti, secondi e millisecondi da unire in un secondo momento, è possibile utilizzare queste funzioni:

Ora:

def gethour():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]

Minute:

def getminute():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]

Secondo:

def getsecond():
    from datetime import datetime
    return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]

millisecond:

def getmillisecond():
    from datetime import datetime
    return (str(datetime.now())).split('.')[1]

11

Se vuoi solo il timestamp corrente in ms (ad esempio, per misurare il tempo di esecuzione), puoi anche usare il modulo "timeit":

import timeit
start_time = timeit.default_timer()
do_stuff_you_want_to_measure()
end_time = timeit.default_timer()
print("Elapsed time: {}".format(end_time - start_time))

9

Perché nessuno lo ha ancora menzionato, e questo è qualcosa in cui mi sono imbattuto di recente ... in qualsiasi fuso orario.

from datetime import datetime

import pytz


JST = pytz.timezone("Asia/Tokyo")


local_time = JST.fromutc(datetime.utcnow())

Se tutto ciò che vuoi è il tempo, puoi farlo con local_time.time().


Sorprendentemente, tutte le risposte di cui sopra non menzionavano i fusi orari. dovresti anche includere strftime per ottenere il formato desiderato.
GraphicalDot

1
Non l'ho incluso poiché è già stato trattato in altre risposte (e la formattazione del display non faceva parte della domanda).
Kungphu,

8

Quello che segue è quello che uso per ottenere il tempo senza dover formattare. Ad alcune persone non piace il metodo split, ma è utile qui:

from time import ctime
print ctime().split()[3]

Stampa in formato HH: MM: SS.


8

Questa domanda è per Python ma poiché Django è uno dei framework più utilizzati per Python, è importante notare che se si utilizza Django si può sempre usare al timezone.now()posto di datetime.datetime.now(). Il primo è "consapevole" nel fuso orario, mentre il secondo no.

Vedi questa risposta SO e il documento Django per i dettagli e la logica alla base timezone.now().

from django.utils import timezone

now = timezone.now()

7

Puoi farlo usando ctime ():

from time import time, ctime
t = time()
ctime(t)

produzione:

Sat Sep 14 21:27:08 2019

Questi risultati sono diversi perché il timestamp restituito ctime()dipende dalla posizione geografica.

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.