En Python, ¿cómo se determina la compensación de tiempo UTC en la que está configurada la computadora?Obtención del desplazamiento UTC de la computadora en Python
Respuesta
gmtime()
devolverá la hora UTC y localtime()
devolverá la hora local, por lo que al restar los dos debe obtener el desplazamiento utc.
import time
print -time.timezone
imprime desplazamiento en segundos (para tener en cuenta el horario de verano (DST) UTC ver time.altzone:
is_dst = time.daylight and time.localtime().tm_isdst > 0
utc_offset = - (time.altzone if is_dst else time.timezone)
donde desplazamiento UTC se define a través de: "Para llegar hora local, agregue el desplazamiento utc al tiempo utc. "
En Python 3.3+ hay tm_gmtoff
attribute si la biblioteca C subyacente lo admite:
utc_offset = time.localtime().tm_gmtoff
Nota: time.daylight
puede dar un resultado incorrecto en some edge cases.
tm_gmtoff
se utiliza automáticamente por fecha y hora, si está disponible en Python 3.3+:
from datetime import datetime, timedelta, timezone
d = datetime.now(timezone.utc).astimezone()
utc_offset = d.utcoffset() // timedelta(seconds=1)
Para obtener el desplazamiento actual de una manera que soluciones alternativas al problema time.daylight
y que funciona incluso si no está disponible tm_gmtoff
UTC, @jts's suggestion a Substruct la hora local y UTC se puede utilizar:
import time
from datetime import datetime
ts = time.time()
utc_offset = (datetime.fromtimestamp(ts) -
datetime.utcfromtimestamp(ts)).total_seconds()
para obtener UTC compensado por los últimos/fechas futuras, pytz
zonas horarias se podrían utilizar:
from datetime import datetime
from tzlocal import get_localzone # $ pip install tzlocal
tz = get_localzone() # local timezone
d = datetime.now(tz) # or some other local date
utc_offset = d.utcoffset().total_seconds()
Funciona durante las transiciones de horario de verano, que trabaja para pasado/futuro data incluso si la zona horaria local tenía desplazamiento diferente en el momento, por ejemplo, Europa/Moscú zona horaria en el período de 2010 a 2015 UTC.
Esto es agradable y limpio. – Rockallite
Súper útil. Gracias, J.F. –
Tenga en cuenta que 'total_seconds()' solo está disponible en Python 3.2+. – mattst
me gustan:
>>> strftime('%z')
'-0700'
me trataron respuesta STC' primero, pero me dio un resultado erróneo. Estoy en -0700 ahora, pero estaba diciendo que estaba en -0800. Pero tuve que hacer una conversión antes de poder obtener algo que pudiera restar, así que tal vez la respuesta fue más incompleta que incorrecta.
''% z'' no es compatible con Python (puede funcionar en algunos sistemas en los que es probable que pueda usar' time.localtime() .tm_gmtoff' en su lugar, para obtener el desplazamiento utc como un número, no como una cadena). El resultado (de ''% z'') debe ser idéntico a la respuesta de @jts'. Incluye tu código si piensas lo contrario. – jfs
importación tiempo tiempo 0 = time.time() utc_time = time.mktime (time.gmtime (tiempo 0)) = LOCAL_TIME time.mktime (time.localtime (tiempo 0)) offset = LOCAL_TIME - utc_time de impresión (offset/(60 * 60)) Da -8. – dstromberg
1. no coloque el código en los comentarios, actualice su respuesta 2. no es correcto usar mktime() aquí, use 'calendar.timegm()' o 'datetime()' para encontrar la diferencia – jfs
Aquí hay un código python3 con solo fecha y hora como importaciones. HTH
>>> from datetime import datetime
>>> import time
>>> def date2iso(thedate):
... strdate = thedate.strftime("%Y-%m-%dT%H:%M:%S")
... minute = (time.localtime().tm_gmtoff/60) % 60
... hour = ((time.localtime().tm_gmtoff/60) - minute)/60
... utcoffset = "%.2d%.2d" %(hour, minute)
... if utcoffset[0] != '-':
... utcoffset = '+' + utcoffset
... return strdate + utcoffset
...
>>> date2iso(datetime.fromtimestamp(time.time()))
'2015-04-06T23:56:30-0400'
Esto funciona para mí:
if time.daylight > 0:
return time.altzone
else:
return time.timezone
es incorrecto. Aviso: ['time.localtime(). Tm_isdst> 0' en un código similar en mi respuesta] (http://stackoverflow.com/a/3168394/4279) – jfs
Lo siento, su publicación es tan larga y completa que lo hago No he entendido que es la misma respuesta. Mi publicación es seguramente una versión más corta de la misma solución. – Alecs
no, el código es incorrecto. 'time.daylight' no dice si el horario de verano es ahora mismo. Dice que la hora local puede tener DST. Es por eso que tienes que llamar a 'time.localtime(). Tm_isdst' – jfs
- 1. Desplazamiento UTC en minutos
- 2. Obtener el desplazamiento UTC del nombre de la zona horaria en python
- 3. Obtención del estado del sistema en python
- 4. convertir hora utc y desplazamiento a DateTime
- 5. Cómo obtener el desplazamiento UTC en segundos en Android
- 6. ¿Cómo puedo obtener el desplazamiento utc en Rails?
- 7. ¿Cómo obtengo el desplazamiento UTC actual (zona horaria)?
- 8. Obtención de la ruta del archivo del módulo importado
- 9. Compensación UTC en PHP
- 10. Conversión de cadena con desplazamiento UTC a un objeto datetime
- 11. ¿Cómo puedo determinar una zona horaria por el desplazamiento UTC?
- 12. Cómo obtener la fecha de modificación del archivo en UTC desde Python
- 13. Obtención del remitente en jQuery
- 14. ¿Cuál es la mejor manera de obtener el desplazamiento UTC en Perl?
- 15. Obtención de NppExec para comprender la ruta del archivo actual en Notepad ++ (para scripts de Python)
- 16. Desplazamiento de la barra de desplazamiento del navegador
- 17. Obtención del nombre de conjunto
- 18. ¿Cómo calculo el desplazamiento, en horas, de una zona horaria dada de UTC en ruby?
- 19. Obtención de const_iterator del iterador
- 20. Obtención del despachador de IU en la biblioteca de clases
- 21. Obtención de contactos de Outlook con Python
- 22. Convirtiendo python datetime a timestamp y de regreso en UTC todavía usa la zona horaria local
- 23. Obtención de la ruta del archivo en java
- 24. Obtener la posición del ratón en desplazamiento
- 25. La obtención de la clave pública del certificado de
- 26. convertir la hora local, de alguien a la hora UTC
- 27. Crystaldecisions.CrystalReports.Engine.dll no encontrado en la computadora del cliente
- 28. Python Desplazamiento a la derecha sin signo
- 29. Obtención del URL en WPF WebBrowser
- 30. necesito convertir UTC (aws ec2) a PST en python
Brilliant! Necesito aprender a pensar simple :) – Paul
Esto es una simplicidad elegante aquí. –
Restarlos da 'TypeError: tipo (s) de operandos no soportados para -: 'time.struct_time' y 'time.struct_time''. ¿Qué es lo que realmente quieres decir? – rakslice