Python obtiene la hora actual en la zona horaria correcta

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 

Editar:

Responder

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:

  • ¿La zona horaria de su servidor / sistema está configurada correctamente?
    • Es posible que los contenedores de la ventana acoplable no estén sincronizados con el host, por lo que vale la pena comprobarlo.
  • ¿Es correcto el tiempo? ¿No terminaste con +2 horas después de cambiar la zona horaria?

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.