Problemas de tiempo

Me enfrento a algunos problemas en un programa multiplataforma: cuando abro un shell de Python en Linux y en Windows, no obtengo el mismo tiempo de Epoch.

En Linux, traté de hacerdpkg-reconfigure tzdata.

Actualmente, en Linux obtengo eso con el dpkg-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 regresa:

('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 regresan:

('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)

Luego 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..................

Así que en Windows, ¡tenemos la fecha de 1970, mientras que en Linux, comienza en 1972!

Luego, 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 pueden ver, no vemos nada para 1970 !!!!

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

Gracias

Mr_Kaz

Mensaje antiguo: Hola, estoy enfrentando algunos problemas en un programa multiplataforma: cuando abro un shell de Python en Linux y en Windows, no obtengo el mismo tiempo de Epoch.

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 puede ver, hay una hora de diferencia. Alguien sabe por qué

Gracias

Mr_Kaz

Gracias por tu 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 la hora 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, intenté hacerdpkg-reconfigure tzdata. Pero sea lo que sea que elija, el tiempo todavía está mal.

Actualmente, en Linux obtengo eso con el dpkg-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 se usa en Windows. Estoy usando 'UTC'.

Creo este script:

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

En Linux que regresa:

('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 regresan:

('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 puede ver, todavía existe el problema del tiempo desde la Época (era la 1 de la mañana en la época ...)

Creo otro tema porque parece que ya no se debe a Python:Timezone cuestiones

Respuestas a la pregunta(3)

Su respuesta a la pregunta