urls tutorial template example python time epoch localtime hour

python - tutorial - Problemas de tiempo



django views (3)

¿La hora o la zona horaria están configuradas de forma diferente en cualquiera de sus PC?

http://docs.python.org/library/time.html#time.gmtime

El enlace anterior sugiere usar time.gmtime () para obtener el tiempo desde la época en UTC, en lugar de la hora local.

Estoy enfrentando algunos problemas en un programa multiplataforma: cuando abro un shell python en Linux y en Windows, no obtengo el mismo tiempo de la Época.

En Linux, traté de hacer dpkg-reconfigure tzdata .

Actualmente, en Linux obtengo ese avec dtkg-reconfigure tzdata:

Current default time zone: ''Europe/London'' Local time is now: Mon May 30 10:29:52 BST 2011. Universal Time is now: Mon May 30 09:29:52 UTC 2011.

Luego, en la consola de Python, creo este script:

import time print time.tzname, time.timezone, time.altzone, time.daylight print time.localtime() print time.localtime(0)

En Linux que vuelve:

(''GMT'', ''BST'') 0 -3600 1 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=35, tm_sec=8, tm_wday=0, tm_yday=150, tm_isdst=1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

En ventanas que devuelve:

(''GMT'', ''GMT (heure d/x92/xe9t/xe9)'') 0 -3600 1 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=40, tm_sec=1, tm_wday=0, tm_yday=150, tm_isdst=1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Entonces probé este script:

myTime = 0 dst = 0 while myTime < time.time(): l = time.localtime(myTime) if l[8] is not dst: dst = l[8] print dst, l myTime += 24*60*60

Las primeras líneas devueltas en Linux son:

1 time.struct_time(tm_year=1972, tm_mon=3, tm_mday=27, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=80, tm_isdst=1) 0 time.struct_time(tm_year=1972, tm_mon=10, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=304, tm_isdst=0) 1 time.struct_time(tm_year=1973, tm_mon=3, tm_mday=19, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=78, tm_isdst=1) 0 time.struct_time(tm_year=1973, tm_mon=10, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=302, tm_isdst=0) IT CONTINUES UTNIL TODAY..................

Las primeras líneas devueltas en Windows son:

1 time.struct_time(tm_year=1970, tm_mon=3, tm_mday=30, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=89, tm_isdst=1) 0 time.struct_time(tm_year=1970, tm_mon=10, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=299, tm_isdst=0) 1 time.struct_time(tm_year=1971, tm_mon=3, tm_mday=29, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=88, tm_isdst=1) 0 time.struct_time(tm_year=1971, tm_mon=11, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=305, tm_isdst=0) 1 time.struct_time(tm_year=1972, tm_mon=3, tm_mday=27, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=87, tm_isdst=1) 0 time.struct_time(tm_year=1972, tm_mon=10, tm_mday=30, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=304, tm_isdst=0) 1 time.struct_time(tm_year=1973, tm_mon=3, tm_mday=26, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=85, tm_isdst=1) 0 time.struct_time(tm_year=1973, tm_mon=10, tm_mday=29, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=302, tm_isdst=0) IT CONTINUES UTNIL TODAY..................

Entonces en Windows, obtenemos la fecha de 1970, mientras que en Linux, ¡comienza en 1972!

Entonces, si escribo eso en mi consola bash:

zdump -v /usr/share/zoneinfo/Europe/London | grep 197

Lo entiendo :

/usr/share/zoneinfo/Europe/London Sun Oct 31 01:59:59 1971 UTC = Sun Oct 31 02:59:59 1971 BST isdst=0 gmtoff=3600 /usr/share/zoneinfo/Europe/London Sun Oct 31 02:00:00 1971 UTC = Sun Oct 31 02:00:00 1971 GMT isdst=0 gmtoff=0 /usr/share/zoneinfo/Europe/London Sun Mar 19 01:59:59 1972 UTC = Sun Mar 19 01:59:59 1972 GMT isdst=0 gmtoff=0 /usr/share/zoneinfo/Europe/London Sun Mar 19 02:00:00 1972 UTC = Sun Mar 19 03:00:00 1972 BST isdst=1 gmtoff=3600 /usr/share/zoneinfo/Europe/London Sun Oct 29 01:59:59 1972 UTC = Sun Oct 29 02:59:59 1972 BST isdst=1 gmtoff=3600 /usr/share/zoneinfo/Europe/London Sun Oct 29 02:00:00 1972 UTC = Sun Oct 29 02:00:00 1972 GMT isdst=0 gmtoff=0 /usr/share/zoneinfo/Europe/London Sun Mar 18 01:59:59 1973 UTC = Sun Mar 18 01:59:59 1973 GMT isdst=0 gmtoff=0 /usr/share/zoneinfo/Europe/London Sun Mar 18 02:00:00 1973 UTC = Sun Mar 18 03:00:00 1973 BST isdst=1 gmtoff=3600 /usr/share/zoneinfo/Europe/London Sun Oct 28 01:59:59 1973 UTC = Sun Oct 28 02:59:59 1973 BST isdst=1 gmtoff=3600 IT CONTINNUES UNTIL 1979 !..........

Como puede ver, ¡no vemos nada para 1970!

¿Alguien sabe cómo puedo cambiar la zona horaria de Debian, en la mía propia?

Gracias,

Mr_Kaz

Mensaje anterior: Hola, estoy enfrentando algunos problemas en un programa multiplataforma: cuando abro un shell python en Linux y en Windows, no obtengo el mismo tiempo de la Época.

En Linux (debian squeeze):

>>> import time >>> time.localtime() time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=10, tm_min=1, tm_sec=57, tm_wday=0, tm_yday=150, tm_isdst=1) >>> time.localtime(0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

En Windows (7 64 bits Professionnal):

>>> import time >>> time.localtime() time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=10, tm_min=1, tm_sec=59, tm_wday=0, tm_yday=150, tm_isdst=1) >>> time.localtime(0) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Como pueden ver, hay una hora de diferencia. Alguien sabe por qué ?

Gracias,

Mr_Kaz

Gracias por su respuesta, eso es lo que hice entonces: en Windows:

>>> time.tzname (''GMT'', ''GMT (heure d/x92/xe9t/xe9)'') >>> time.timezone 0 >>> time.altzone -3600 >>> time.daylight 1

en Linux:

>>> time.tzname (''UTC'', ''UTC'') >>> time.timezone 0 >>> time.altzone 0 >>> time.daylight 0

No quiero usar gmtime si no sé por qué hay un problema. Traté de cambiar el tiempo en Linux para obtener lo mismo que en Windows (comencé el desarrollo de mi software en Windows y funciona perfectamente, por eso quiero cambiar la hora del sistema en Linux y no en Windows). En Linux, traté de hacer dpkg-reconfigure tzdata . Pero lo que sea que elija el tiempo todavía está mal.

Actualmente, en Linux obtengo ese avec dtkg-reconfigure tzdata:

Current default time zone: ''Europe/London'' Local time is now: Mon May 30 10:29:52 BST 2011. Universal Time is now: Mon May 30 09:29:52 UTC 2011.

No entiendo qué tiempo usé en Windows. Estoy usando ''UTC''.

Yo creo este script:

import time print time.tzname, time.timezone, time.altzone, time.daylight print time.localtime() print time.localtime(0)

En Linux que vuelve:

(''GMT'', ''BST'') 0 -3600 1 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=35, tm_sec=8, tm_wday=0, tm_yday=150, tm_isdst=1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=1, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

En ventanas que devuelve:

(''GMT'', ''GMT (heure d/x92/xe9t/xe9)'') 0 -3600 1 time.struct_time(tm_year=2011, tm_mon=5, tm_mday=30, tm_hour=11, tm_min=40, tm_sec=1, tm_wday=0, tm_yday=150, tm_isdst=1) time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

Y como pueden ver, todavía existe el problema del tiempo desde la Época (era la 1 de la madrugada ...)

Creo otro tema porque parece que ya no es debido a Python: problemas de zona horaria


Esto es casi seguro debido a las diferentes configuraciones de zona horaria entre los dos entornos.

Examine time.tzname, time.timezone, time.altzone, time.daylight


Me doy cuenta de que esta es una vieja pregunta, pero estaba viendo algunos problemas en la misma área y pensé que compartiría:

De 1968 a 1972, el Reino Unido mantuvo BST durante todo el año

Esto significa que no hubo cambios de horario de verano para Europa / Londres en esos años, por lo que los resultados de Linux son precisos allí. No cabe duda de que hay una diferencia entre ''GMT'' y ''Europa / Londres'', ya que GMT se aplica a todos los países en esa zona horaria no incluida en el Reino Unido.

Ver, por ejemplo: http://wwp.greenwichmeantime.co.uk/daylight-saving-time/history-william-willetts.htm