Ahora mismo uso
import datetime print(datetime.datetime.now().strftime("%X"))
para mostrar la hora actual como una cadena.
El problema es que mi computadora se está ejecutando en la zona horaria de Europe/Berlin
, y la compensación de +2 a UTC no se contabiliza aquí. En lugar de 19:22:26
debería mostrar 21:22:26
También diferente a las otras respuestas que encontré aquí, no las 21:22:26
llamando
datetime.datetime(2014, 7, 10, 18, 44, 59, 193982, tzinfo=)
pero
datetime.datetime.now()
Así que intenté (y fallé) lo siguiente:
>>> from pytz import timezone >>> datetime.datetime.now().astimezone(timezone('Europe/Berlin')) ValueError: astimezone() cannot be applied to a naive datetime
No se puede publicar como respuesta, ya que esta pregunta está marcada como cerrada
El servidor con el que tuve este problema ya no existe. De todos modos, aquí hay algunas otras cosas que vale la pena revisar:
Para obtener la hora actual en la zona horaria local como un objeto de fecha y hora ingenuo:
from datetime import datetime naive_dt = datetime.now()
Si no devuelve el tiempo esperado, significa que su computadora está mal configurada. Deberías arreglarlo primero (no está relacionado con Python).
Para obtener la hora actual en UTC como un objeto de fecha y hora ingenuo:
naive_utc_dt = datetime.utcnow()
Para obtener la hora actual como un objeto datetime en Python 3.3+:
from datetime import datetime, timezone utc_dt = datetime.now(timezone.utc) # UTC time dt = utc_dt.astimezone() # local time
Para obtener la hora actual en la zona horaria dada de la base de datos tz:
import pytz tz = pytz.timezone('Europe/Berlin') berlin_now = datetime.now(tz)
Funciona durante las transiciones DST. Funciona si la zona horaria tenía un desplazamiento UTC diferente en el pasado, es decir, funciona incluso si la zona horaria corresponde a varios objetos tzinfo en diferentes momentos.