Я сталкиваюсь с некоторыми проблемами в кроссплатформенной программе: когда я открываю оболочку Python в Linux и в Windows, я не получаю одно и то же время из Epoch.
В Linux я пыталсяdo dpkg-reconfigure tzdata
.
В настоящее время в Linux я получаю avec dpkg -configure 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.
Затем в консоли 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 UTNIL 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 UTNIL 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 CONTINNUES UNTIL 1979 !..........
Как вы можете видеть, мы ничего не видим в 1970 году !!!!
Кто-нибудь знает, как я могу изменить timezoНе из Debian, в мой собственный!?
Спасибо,
Mr_Kaz
Старое сообщение: Здравствуйте, у меня возникли некоторые проблемы вкроссплатформенная программа: когда я открываю оболочку python в Linux и в Windows, я не получаю одно и то же время из Epoch.
В 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)
В Windows (7 64 бит 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)
Как видите, разница в часе.Кто-нибудь знает почему?
Спасибо,
Mr_Kaz
Спасибо за ваш ответ, который я сделал тогда: в 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 я получаю avec dpkg -configure 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.
Я не понимаю, какое время используется в 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)
В окнах, которыевозвращает:
('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)
И, как вы можете видеть, со времен эпохи все еще существует проблема времени (это был час ночи) ... 1104 *
Я создаю другую тему, потому что она, похоже, больше не связана с питоном: Проблемы с часовым поясом