chile - Use Python para averiguar si una zona horaria actualmente en horario de verano
pytz timezone chile (2)
from datetime import datetime
import pytz
isdst_now_in = lambda zonename: bool(datetime.now(pytz.timezone(zonename)).dst())
Ejemplo:
>>> isdst_now_in("America/Los_Angeles") # 2014-10-27 12:32:07 PDT-0700
True
>>> isdst_now_in("Australia/Melbourne") # 2014-10-28 06:32:07 AEDT+1100
True
Aquí está la versión solo stdlib en Unix que usa la función time.tzset()
:
import os
import time
from contextlib import contextmanager
@contextmanager
def local_timezone(zonename):
#NOTE: it manipulates global state
oldname = os.environ.get(''TZ'')
try:
os.environ[''TZ''] = zonename
time.tzset()
yield
finally:
if oldname is None:
del os.environ[''TZ'']
else:
os.environ[''TZ''] = oldname
time.tzset()
def time_isdst_now_in(zonename):
with local_timezone(zonename):
return time.localtime().tm_isdst > 0
El uso es el mismo:
>>> time_isdst_now_in(''Europe/London'') # 2014-04-17 18:42:11 BST+0100
True
Nota: time.daylight
no se utiliza debido a problemas en algunos casos de borde .
Esta pregunta ya tiene una respuesta aquí:
Tenemos un servidor que se ejecuta en hora GMT. Necesito escribir una secuencia de comandos de Python que determine si es actualmente (en este momento) el horario de verano (DST) en Los Ángeles, California. ¿Cómo puedo lograr esto? Eché un vistazo a pytz y al tiempo, pero no puedo entenderlo. Me doy cuenta de que podría crear cierta lógica, como comparar la hora actual en LA con la hora GMT, pero sería mucho más limpio si pudiera usar una biblioteca estándar en su lugar.
Gracias
Edición: Aquí hay un código de muestra de mi configuración de la zona horaria:
from pytz import timezone
import pytz
from datetime import datetime, timedelta
tz = timezone(''America/Los_Angeles'')
// Instantiate a datetime object using tz?
Edición: Aquí hay un fragmento de código que funcionará. No es elegante, por lo que pregunto si hay una biblioteca o algo que esté hecho para esto. Tal vez como una función is_dst ().
utc = timezone("UTC")
now = utc.localize(datetime.utcnow())
los_angeles_tz = timezone(''America/Los_Angeles'')
los_angeles_time = now.astimezone(los_angeles_tz)
delta = los_angeles_time.utcoffset()
dstDelta = timedelta(hours=-8)
is_dst = (delta == dstDelta)
import pytz
from datetime import datetime, timedelta
def is_dst(zonename):
tz = pytz.timezone(zonename)
now = pytz.utc.localize(datetime.utcnow())
return now.astimezone(tz).dst() != timedelta(0)
Uso:
>>> is_dst("America/Los_Angeles")
False
>>> is_dst("America/Sao_Paulo")
True