¿Cómo obtengo la hora actual?

respuesta

Usar:

>>> 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 ahorrar tipeo, puede importar el datetimeobjeto desde el datetimemódulo:

>>> from datetime import datetime

Luego elimine el liderazgo datetime.de todo lo anterior.

Puedes usar time.strftime():

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'
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 strftimedirectivas .

Similar a la respuesta de Harley , pero use la str()función para un formato rápido y sucio, un poco más legible por humanos:

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

How do I get the current time in Python?

el timemodulo

El timemódulo proporciona funciones que nos indican el tiempo en "segundos desde la época" así como otras utilidades.

import time

Tiempo de la época de Unix

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

>>> time.time()
1424233311.771502

Esta marca de tiempo no tiene en cuenta los segundos intercalares, por lo que no es lineal; los segundos intercalares se ignoran. Entonces, si bien no es equivalente al estándar internacional UTC, 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 se pueda analizar en un datetimeobjeto o un objeto serializado datetime(estos se describirán más adelante).

time.ctime

También puede representar la hora actual de la forma que prefiera 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 normalmente no da como resultado cadenas que se puedan ordenar cronológicamente:

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

También puede hidratar las marcas de tiempo en una forma legible por 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 la cantidad de estos casos disminuirá).

datetimemódulo

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

>>> import datetime

datetime.datetime.now

El datetime.nowes un método de clase que devuelve la hora actual. Utiliza la time.localtimeinformación sin la zona horaria (si no se proporciona, de lo contrario, consulte la información sobre la zona horaria a continuación). Tiene una representación (que le permitiría recrear un objeto equivalente) reflejada en el caparazón, pero cuando se imprime (o se fuerza a un str), está en formato legible por humanos (y casi ISO), y el tipo lexicográfico es equivalente al orden 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 horautcnow

Puede obtener un objeto de fecha y hora 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).

fechahora consciente de la zona horaria

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 pytzmódulo:

>>> 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 timezoneclase con una instancia de utc timezoneadjunta, que también hace que el objeto sea consciente de la zona horaria (pero convertir a otra zona horaria sin el práctico pytzmódulo se deja como un 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 ingenuo de fecha y hora sea consciente con el método de pytzzona horaria localize, o reemplazando el atributo tzinfo (con replace, esto se hace a ciegas), pero estos son más los ú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 pytzmódulo nos permite hacer que nuestros datetimeobjetos sean conscientes de la zona horaria y convertir los tiempos a los cientos de zonas horarias disponibles en el pytzmódulo.

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

Las otras formas de ver la hora 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 en cuanto a la zona horaria para la que estaba destinada una cadena o un objeto de fecha y hora serializado.

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

Hacer

from time import time

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

Hay alguna diferencia para las plataformas Unix y Windows.

>>> 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()método.

Esta página tiene más detalles.

Las respuestas anteriores son todas buenas sugerencias, pero me parece más fácil de 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 con un formato agradable de la hora local actual.

La forma más rápida es:

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

Si necesita la hora actual como un timeobjeto:

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

Puedes usar el timemódulo:

>>> import time
>>> print(time.strftime("%d/%m/%Y"))
06/02/2015

El uso del capital Yda el año completo, y el uso ydaría 06/02/15.

También podría 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'

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

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

¿Por qué no preguntarle al US Naval Observatory , 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...

Usar pandas para obtener la hora actual, exagerando el problema en cuestión:

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)

Producción:

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

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

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

solo por 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'))

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 fecha tal como lo desea (de la documentación de "fecha y hora" de Python aquí ).

tabla de código de formato strftime

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 de horario de verano ("retroceder"). Para evitar ambigüedades, se debe utilizar cualquiera de las zonas horarias UTC:

from datetime import datetime

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

O un objeto consciente de la zona horaria que tiene la información correspondiente de la zona horaria adjunta (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
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

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

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

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

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 confunda; no se preocupe, eche un vistazo a dir(pendulum.constants)Sin embargo, hay un poco más que 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 se refiere a otro lugar.

Y sigue. Para resumir: Pendulum intenta hacer para la fecha y la hora lo que hicieron las solicitudes para HTTP. Vale la pena considerarlo, particularmente por su facilidad de uso y su extensa documentación.

De forma predeterminada, la now()función devuelve la salida en el YYYY-MM-DD HH:MM:SS:MSformato. Use la secuencia de comandos de muestra a continuación para obtener la fecha y la hora actuales en una secuencia de comandos de Python e imprimir los resultados en la pantalla. Cree un archivo getDateTime1.pycon el siguiente contenido.

import datetime

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

La salida se ve a continuación:

2018-03-01 17:03:46.759624

Pruebe el módulo de flechas 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'

Para obtener exactamente 3 puntos decimales por milisegundos 11:34:23.751, ejecute esto:

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

Más contexto:

Quiero obtener el tiempo con milisegundos. Una forma sencilla de conseguirlos:

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 solo quiero milisegundos , ¿verdad? La forma más corta de conseguirlos:

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)

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

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 que las horas, los minutos, los segundos y los milisegundos se fusionen 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]

Segundo:

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

Milisegundo:

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

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

#list timezones
pytz.all_timezones

Puedes intentar lo siguiente

import datetime

now = datetime.datetime.now()
print(now)

o

import datetime

now = datetime.datetime.now()
print(now.strftime("%Y-%b-%d, %A %I:%M:%S"))

Porque nadie lo ha mencionado todavía, y esto es algo con lo que me encontré recientemente... el método fromutc() de una zona horaria de pytz combinado con utcnow() de datetime es la mejor manera que he encontrado para obtener una hora actual útil (y fecha) 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 tiempo, puede obtenerlo con local_time.time().

import datetime

todays_date = datetime.date.today()
print(todays_date)
>>> 2019-10-12

# adding strftime will remove the seconds
current_time = datetime.datetime.now().strftime('%H:%M')
print(current_time)
>>> 23:38

Método 1: obtener la fecha y hora actuales del sistema datetime

El módulo datetime proporciona clases para manipular fechas y horas.

Code

from datetime import datetime,date

print("Date: "+str(date.today().year)+"-"+str(date.today().month)+"-"+str(date.today().day))
print("Year: "+str(date.today().year))
print("Month: "+str(date.today().month))
print("Day: "+str(date.today().day)+"\n")

print("Time: "+str(datetime.today().hour)+":"+str(datetime.today().minute)+":"+str(datetime.today().second))
print("Hour: "+str(datetime.today().hour))
print("Minute: "+str(datetime.today().minute))
print("Second: "+str(datetime.today().second))
print("MilliSecond: "+str(datetime.today().microsecond))

Output will be like

Date: 2020-4-18
Year: 2020
Month: 4
Day: 18

Time: 19:30:5
Hour: 19
Minute: 30
Second: 5
MilliSecond: 836071

Método 2: obtener la fecha y la hora actuales si la red está disponible

El paquete urllib nos ayuda a manejar las URL que significan páginas web. Aquí recopilamos datos de la página web http://just-the-time.appspot.com/ y analizamos dateime de la página web utilizando el paquete dateparser .

Code

from urllib.request import urlopen
import dateparser

time_url = urlopen(u'http://just-the-time.appspot.com/')
datetime = time_url.read().decode("utf-8", errors="ignore").split(' ')[:-1]
date = datetime[0]
time = datetime[1]

print("Date: "+str(date))
print("Year: "+str(date.split('-')[0]))
print("Month: "+str(date.split('-')[1]))
print("Day: "+str(date.split('-')[2])+'\n')

print("Time: "+str(time))
print("Hour: "+str(time.split(':')[0]))
print("Minute: "+str(time.split(':')[1]))
print("Second: "+str(time.split(':')[2]))

Output will be like

Date: 2020-04-18
Year: 2020
Month: 04
Day: 18

Time: 14:17:10
Hour: 14
Minute: 17
Second: 10

Método 3: obtener la fecha y la hora actuales a partir de la hora local de la máquina

El módulo de tiempo de Python proporciona una función para obtener la hora local a partir de la cantidad de segundos transcurridos desde la época llamada localtime(). La función ctime() toma los segundos transcurridos desde la época como argumento y devuelve una cadena que representa la hora local.

Code

from time import time, ctime
datetime = ctime(time()).split(' ')

print("Date: "+str(datetime[4])+"-"+str(datetime[1])+"-"+str(datetime[2]))
print("Year: "+str(datetime[4]))
print("Month: "+str(datetime[1]))
print("Day: "+str(datetime[2]))
print("Week Day: "+str(datetime[0])+'\n')

print("Time: "+str(datetime[3]))
print("Hour: "+str(datetime[3]).split(':')[0])
print("Minute: "+str(datetime[3]).split(':')[1])
print("Second: "+str(datetime[3]).split(':')[2])

Output will be like

Date: 2020-Apr-18
Year: 2020
Month: Apr
Day: 18
Week Day: Sat

Time: 19:30:20
Hour: 19
Minute: 30
Second: 20