Python中的时间不一致

| 我在跨平台程序中面临一些问题: 当我在Linux和Windows中打开python shell时,我没有从Epoch获得相同的时间。 在Linux中,我尝试执行
dpkg-reconfigure tzdata
。 当前,在linux中,我得到了dpkg-reconfigure tzdata的avec:
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.
然后,在python控制台中,创建以下脚本:
import time
print time.tzname, time.timezone, time.altzone, time.daylight
print time.localtime()
print time.localtime(0)
在linux上返回:
(\'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)
在返回的Windows上:
(\'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)
然后我尝试了这个脚本:
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
Linux中返回的第一行是:
    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 UNTIL TODAY..................
Windows中返回的第一行是:
    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 UNTIL TODAY..................
因此,在Windows中,日期可以追溯到1970年,而在Linux中,日期可以追溯到1972年! 然后,如果我在bash控制台中编写该代码:
zdump -v /usr/share/zoneinfo/Europe/London | grep 197
我明白了:
/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 CONTINUES UNTIL 1979 !..........
如您所见,1970年我们什么都看不到! 如何将Debian的时区更改为我自己的时区!? 旧消息: 我在跨平台程序中面临一些问题: 当我在Linux和Windows中打开python shell时,我没有从Epoch获得相同的时间。 在linux中(debian压缩):
>>> 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)
在Windows(7 64位专业版)中:
>>> 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)
如您所见,相差一个小时。为什么? 谢谢您的回答,这就是我当时所做的: 在Windows中:
>>> time.tzname
(\'GMT\', \'GMT (heure d\\x92\\xe9t\\xe9)\')
>>> time.timezone
0
>>> time.altzone
-3600
>>> time.daylight
1
在Linux中:
>>> time.tzname
(\'UTC\', \'UTC\')
>>> time.timezone
0
>>> time.altzone
0
>>> time.daylight
0
如果我不知道为什么会有问题,我不想使用gmtime。 我试图更改Linux中的时间以与Windows中的时间相同(我开始在Windows中开发软件,并且它运行良好,这就是为什么我想在Linux中而不是Windows中更改系统时间)。 在Linux中,我尝试执行
dpkg-reconfigure tzdata
。 但是无论我选择什么时间,仍然是错误的。 当前,在linux中,我得到了dpkg-reconfigure tzdata的avec:
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.
我不知道Windows在哪个时间使用。我正在使用\'UTC \'。 我创建此脚本:
import time
print time.tzname, time.timezone, time.altzone, time.daylight
print time.localtime()
print time.localtime(0)
在linux上返回:
(\'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)
在返回的Windows上:
(\'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)
正如您所看到的,自大纪元(那个纪元是凌晨1点...)以来,仍然存在时间问题。 我创建了另一个主题,因为它似乎不再受python的影响: 时区问题     
已邀请:
        您的两台PC上的时间或时区设置是否不同? http://docs.python.org/library/time.html#time.gmtime 上面的链接建议使用time.gmtime()获取自UTC纪元以来的时间,而不是本地时间。     
        这几乎可以肯定是由于两个环境之间的时区配置不同。 检查
time.tzname, time.timezone, time.altzone, time.daylight
    
        我意识到这是一个古老的问题,但是我一直在研究同一领域的一些问题,并认为我会分享: 从1968年至1972年,英国全年保持BST 这意味着这些年来欧洲/伦敦的DST没有变化-因此,您的Linux结果准确无误。 “ GMT”和“欧洲/伦敦”之间毫无区别,因为GMT适用于该时区的所有国家,而不是英国。 参见,例如:http://wwp.greenwichmeantime.co.uk/daylight-saving-time/history-william-willetts.htm     

要回复问题请先登录注册