¿Cuál es el módulo / método utilizado para obtener la hora actual?

2742
user46646 6 ene. 2009 a las 07:54

30 respuestas

La mejor respuesta

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

Y justo el tiempo:

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

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

Consulte la documentación para obtener más información.

Para guardar la escritura, puede importar el objeto datetime desde el módulo datetime:

>>> from datetime import datetime

Luego, elimine los datetime. principales de todo lo anterior.

2911
RTHarston 29 oct. 2019 a las 17:00

Por defecto, la función now() devuelve la salida en el formato YYYY-MM-DD HH:MM:SS:MS. Utilice el siguiente script de muestra para obtener la fecha y hora actuales en un script de Python e imprimir los resultados en la pantalla. Cree el archivo getDateTime1.py con el contenido a continuación.

import datetime

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

El resultado se ve a continuación:

2018-03-01 17:03:46.759624
14
Peter Mortensen 6 jun. 2018 a las 23:03

Esta pregunta no necesita una nueva respuesta solo por el hecho de que ... un nuevo juguete / módulo brillante, sin embargo, es suficiente justificación. Esa es la Pendulum library, que parece hacer el tipo de cosas que la flecha intentó, excepto sin el defectos inherentes y errores que acosan a la flecha.

Por ejemplo, la respuesta a la pregunta original:

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

Hay muchos estándares que deben abordarse, incluidos múltiples RFC e ISO, de los que preocuparse. Alguna vez los mezcló; no se preocupe, eche un vistazo a dir(pendulum.constants) Sin embargo, hay un poco más que los formatos RFC e ISO.

Cuando decimos local, ¿a qué nos referimos? Bueno, quiero decir:

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

Presumiblemente, la mayoría del resto de ustedes quiere decir en otro lugar.

Y así sigue. Larga historia corta: Pendulum intenta hacer por fecha y hora lo que hicieron las solicitudes de HTTP. Vale la pena considerarlo, especialmente por su facilidad de uso y su extensa documentación.

13
Ben 28 dic. 2019 a las 22:47

Porque nadie lo ha mencionado todavía, y esto es algo con lo que me encontré recientemente ... un método fromutc () de la zona horaria pytz combinado con utcnow () de datetime es la mejor manera que he encontrado para obtener una hora (y fecha) útil. en cualquier zona horaria

from datetime import datetime

import pytz


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


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

Si todo lo que desea es el tiempo, puede obtenerlo con local_time.time().

8
kungphu 6 jul. 2018 a las 08:24

Pruebe el módulo de flecha de http://crsmithdev.com/arrow/:

import arrow
arrow.now()

O la versión UTC:

arrow.utcnow()

Para cambiar su salida, agregue .format ():

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

Para una zona horaria específica:

arrow.now('US/Pacific')

Hace una hora:

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

O si quieres la esencia.

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'
13
Peter Mortensen 6 jun. 2018 a las 22:52

Lo siguiente es lo que uso para obtener el tiempo sin tener que formatear. A algunas personas no les gusta el método de división, pero es útil aquí:

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

Se imprimirá en formato HH: MM: SS.

6
Peter Mortensen 6 jun. 2018 a las 22:51

¿Cómo obtengo la hora actual en Python?

El módulo time

El módulo time proporciona funciones que nos dicen el tiempo en "segundos desde la época", así como otras utilidades.

import time

Unix Epoch Time

Este es el formato en el que debe obtener marcas de tiempo para guardar en bases de datos. Es un número de coma flotante simple que se puede convertir en un entero. También es bueno para la aritmética en segundos, ya que representa el número de segundos desde el 1 de enero de 1970 a las 00:00:00, y es luz de memoria en relación con las otras representaciones de tiempo que veremos a continuación:

>>> time.time()
1424233311.771502

Esta marca de tiempo no tiene en cuenta los segundos bisiestos, por lo que no es lineal; los segundos bisiestos se ignoran. Entonces, si bien no es equivalente al estándar UTC internacional, está cerca y, por lo tanto, es bastante bueno para la mayoría de los casos de mantenimiento de registros.

Sin embargo, esto no es ideal para la programación humana. Si tiene un evento futuro que desea que tenga lugar en un momento determinado, querrá almacenar ese tiempo con una cadena que pueda analizarse en un objeto de fecha y hora o en un objeto de fecha y hora serializado (se describirá más adelante).

time.ctime

También puede representar la hora actual de la manera preferida por su sistema operativo (lo que significa que puede cambiar cuando cambia las preferencias de su sistema, así que no confíe en que esto sea estándar en todos los sistemas, como he visto que otros esperan) . Esto suele ser fácil de usar, pero no suele generar cadenas que se puedan ordenar cronológicamente:

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

También puede hidratar marcas de tiempo en forma legible para humanos con ctime:

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

Esta conversión tampoco es buena para el mantenimiento de registros (excepto en el texto que solo será analizado por humanos, y con el reconocimiento óptico de caracteres mejorado y la inteligencia artificial, creo que el número de estos casos disminuirá).

Módulo datetime

El módulo datetime también es bastante útil aquí:

>>> import datetime

datetime.datetime.now

datetime.now es un método de clase que devuelve la hora actual. Utiliza time.localtime sin la información de la zona horaria (si no se proporciona, de lo contrario, consulte la zona horaria a continuación). Tiene una representación (que le permitiría recrear un objeto equivalente) reflejada en el shell, pero cuando se imprime (o coacciona a un str), está en formato legible por humanos (y casi ISO), y el lexicográfico sort es equivalente al tipo cronológico:

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

Fecha y hora utcnow

Puede obtener un objeto datetime en hora UTC, un estándar global, haciendo esto:

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

UTC es un estándar de tiempo que es casi equivalente a la zona horaria GMT. (Si bien GMT y UTC no cambian para el horario de verano, sus usuarios pueden cambiar a otras zonas horarias, como el horario de verano británico, durante el verano).

Datetime zona horaria consciente

Sin embargo, ninguno de los objetos de fecha y hora que hemos creado hasta ahora se puede convertir fácilmente a varias zonas horarias. Podemos resolver ese problema con el módulo pytz:

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

De manera equivalente, en Python 3 tenemos la clase timezone con una instancia utc timezone adjunta, que también hace que la zona horaria del objeto sea consciente (pero para convertir a otra zona horaria sin el práctico módulo pytz queda como ejercicio para el lector):

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

Y vemos que podemos convertir fácilmente a zonas horarias desde el objeto utc original.

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

También puede hacer que un objeto datetime ingenuo sea consciente con el método pytz zona horaria localize, o reemplazando el atributo tzinfo (con replace, esto se hace a ciegas), pero estos son más últimos recursos que las mejores prácticas:

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

El módulo pytz nos permite hacer que nuestra zona horaria de objetos datetime sea consciente y convertir las horas a los cientos de zonas horarias disponibles en el módulo pytz.

Aparentemente, se podría serializar este objeto para la hora UTC y almacenar eso en una base de datos, pero requeriría mucha más memoria y sería más propenso a errores que simplemente almacenar el tiempo de Unix Epoch, lo cual demostré primero.

Las otras formas de ver los tiempos son mucho más propensas a errores, especialmente cuando se trata de datos que pueden provenir de diferentes zonas horarias. Desea que no haya confusión sobre a qué zona horaria se destina una cadena o un objeto de fecha y hora serializado.

Si está mostrando la hora con Python para el usuario, ctime funciona bien, no en una tabla (normalmente no se ordena bien), sino quizás en un reloj. Sin embargo, personalmente recomiendo, cuando se trata de tiempo en Python, ya sea usando el tiempo Unix o un objeto UTC datetime consciente de la zona horaria.

341
Aaron Hall 10 jun. 2016 a las 20:42
import datetime
date_time = str(datetime.datetime.now()).split()
date,time = date_time

La fecha imprimirá la fecha y la hora imprimirá la hora.

6
Abhijeet Deshani 24 ene. 2019 a las 19:58

Puede usar time.strftime() :

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
919
Honest Abe 20 feb. 2013 a las 21:17

.isoformat() está en la documentación, pero aún no está aquí (Esto es muy similar a la respuesta de @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'
36
Peter Mortensen 6 jun. 2018 a las 22:44

Puede usar el módulo time:

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

>>> 06/02/2015

El uso del capital Y da el año completo, y el uso de y daría 06/02/15.

También puede usar el siguiente código para dar un tiempo más largo:

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

Hacer

from time import time

t = time()
  • t - número flotante, bueno para la medición del intervalo de tiempo.

Hay alguna diferencia para las plataformas Unix y Windows.

130
Kevin Guan 4 dic. 2015 a las 06:46

Esta pregunta es para Python, pero dado que Django es uno de los frameworks más utilizados para Python, es importante tener en cuenta que si está usando Django, siempre puede usar timezone.now() en lugar de datetime.datetime.now(). El primero es "consciente" de la zona horaria, mientras que el segundo no.

Consulte esta respuesta SO y el Django doc para obtener detalles y justificación detrás de timezone.now().

from django.utils import timezone

now = timezone.now()
6
Georgy 5 jun. 2019 a las 11:50

Las respuestas anteriores son buenas sugerencias, pero me resulta más fácil usar ctime():

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

Esto proporciona una representación de cadena bien formateada de la hora local actual.

69
Peter Mortensen 19 sep. 2019 a las 14:09
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

Haga dir(date) o cualquier variable, incluido el paquete. Puede obtener todos los atributos y métodos asociados con la variable.

18
Peter Mortensen 6 jun. 2018 a las 22:55

Similar a Respuesta de Harley, pero use la {{ X0}} función para un formato rápido-n-sucio, ligeramente más legible para humanos:

>>> from datetime import datetime
>>> str(datetime.now())
'2011-05-03 17:45:35.177000'
447
Community 23 may. 2017 a las 11:47

Quiero pasar el tiempo con milisegundos. Una forma simple de obtenerlos:

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

Pero quiero solo milisegundos , ¿verdad? La forma más corta de obtenerlos:

import time

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

Agregue o elimine ceros de la última multiplicación para ajustar el número de puntos decimales, o simplemente:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)
12
Peter Mortensen 6 jun. 2018 a las 22:54

¿Por qué no preguntar a los EE. UU. Observatorio Naval, ¿el cronometrador oficial de la Marina de los Estados Unidos?

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

Si vives en el área de DC (como yo), la latencia podría no ser tan mala ...

32
C8H10N4O2 19 ago. 2016 a las 19:45

datetime.now() devuelve la hora actual como un objeto de fecha y hora ingenuo que representa la hora en la zona horaria local. Ese valor puede ser ambiguo, por ejemplo, durante las transiciones DST ("retroceso"). Para evitar la ambigüedad, se debe usar la zona horaria UTC:

from datetime import datetime

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

O un objeto compatible con la zona horaria que tiene adjunta la información correspondiente de la zona horaria (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
jfs 22 dic. 2014 a las 22:52

Hora actual de una zona horaria

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"))
7
Georgy 18 oct. 2019 a las 13:51

Puede usar esta función para obtener la hora (desafortunadamente no dice AM o PM):

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

Para obtener las horas, minutos, segundos y milisegundos para fusionarse más tarde, puede usar estas funciones:

Hora:

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

Minuto:

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

Segunda:

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

Milisegundos:

def getmillisecond():
    from datetime import datetime
    return (str(datetime.now())).split('.')[1]
9
scrpy 13 ago. 2019 a las 16:51

Si ya está usando numpy, entonces directamente puede usar la función numpy.datetime64 ().

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

Por solo fecha:

str(np.datetime64('today'))

O, si ya está usando pandas, puede usar la función pandas.to_datetime ()

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

O

str(pd.to_datetime('today'))
24
durjoy 31 may. 2019 a las 11:59

Esto es con lo que terminé yendo:

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

Además, esta tabla es una referencia necesaria para elegir los códigos de formato apropiados para obtener el formato de la fecha tal como lo desea (de la documentación de Python "datetime" aquí).

strftime format code table

27
Kristen G. 9 ene. 2015 a las 18:24

Usando pandas para obtener la hora actual, exagerando el problema actual:

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)

Salida:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693
30
Georgy 31 may. 2019 a las 09:06
from datetime import datetime
datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Para este ejemplo, la salida será así: '2013-09-18 11:16:32'

Aquí está la lista de strftime directivas.

576
Bob Stein 23 ene. 2020 a las 13:46
>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

Eso genera el GMT actual en el formato especificado. También hay un localtime().

Esta página tiene más detalles.

98
Georgy 31 may. 2019 a las 08:53

Si solo desea la marca de tiempo actual en ms (por ejemplo, para medir el tiempo de ejecución), también puede usar el módulo "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))
10
motagirl2 18 jul. 2018 a las 07:11
>>> import datetime, time
>>> time = time.strftime("%H:%M:%S:%MS", time.localtime())
>>> print time
'00:21:38:20S'
16
pokkie 14 sep. 2019 a las 12:10

La forma más rápida es:

>>> import time
>>> time.strftime("%Y%m%d")
'20130924'
54
Peter Mortensen 19 sep. 2019 a las 14:03

Si necesita la hora actual como un objeto time:

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)
47
Rob I 23 nov. 2011 a las 18:08
415511